在php的面向?qū)ο缶幊讨校倳龅?/p>
class test{ public static function test(){ self::func(); static::func(); } public static function func(){}} 可你知道self和static的區(qū)別么?
其實(shí)區(qū)別很簡單,只需要寫幾個(gè)demo就能懂:
Demo for self:
class Car{ public static function model(){ self::getModel(); } protected static function getModel(){ echo "This is a car model"; }} Car::model();
Class Taxi extends Car{ protected static function getModel(){ echo "This is a Taxi model"; }} Taxi::model();
得到輸出
This is a car modelThis is a car model
可以發(fā)現(xiàn),self在子類中還是會調(diào)用父類的方法
Demo for static
class Car{ public static function model(){ static::getModel(); } protected static function getModel(){ echo "This is a car model"; }}Car::model();Class Taxi extends Car{ protected static function getModel(){ echo "This is a Taxi model"; }}Taxi::model(); 得到輸出
This is a car modelThis is a Taxi model
可以看到,在調(diào)用static,子類哪怕調(diào)用的是父類的方法,但是父類方法中調(diào)用的方法還會是子類的方法(好繞嘴。。)
在PHP5.3版本以前,static和self還是有一點(diǎn)區(qū)別,具體是什么,畢竟都是7版本的天下了。就不去了解了。
總結(jié)呢就是:self只能引用當(dāng)前類中的方法,而static關(guān)鍵字允許函數(shù)能夠在運(yùn)行時(shí)動態(tài)綁定類中的方法。















