本文主題是后期靜態(tài)綁定,探討在繼承范圍內(nèi),通過self和static調(diào)用靜態(tài)方法時,實際指向的類是父類還是子類。
使用魔術(shù)變量Class, 輸出實際指向的類名。實例化Son類后,在使用selfGet時調(diào)用的是父類的hello方法, 在使用staticGet調(diào)用的是子類的hello方法。
class Father{
public static function hello()
{
echo __Class__;
}
public static function selfGet()
{
echo self::hello();
}
public static function staticGet()
{
echo static::hello();
}
}
class Son extends Father{
public static function hello()
{
echo __Class__;
}
}
(new Son)::selfGet();//輸出結(jié)果father
echo "<br>";
(new Son)::staticGet();//輸出結(jié)果son
這是因為使用self調(diào)用靜態(tài)方法時,是在子類未實例化調(diào)用之前就已經(jīng)綁定完畢,所以他原先在父類中指向的就是父類中的方法。而static是在實例化的時候才進行綁定指向的是此時實例化的類,也就是子類。