PHP self關鍵字會出現延遲靜態綁定問題,static關鍵字來補救

問題

最近寫代碼發現PHP的self關鍵字修飾的屬性在子類中被重寫但其值不變,代碼示例如下:

class Animal
{
	public static $name = 'dog';//默認處理狗
	public function paly()
	{
		echo 'I\'m paly with '.self::$name;
	}
}
class Cat extends Animal
{
	public static $name = 'cat';//默認處理狗
	
}
$cat = new Cat();
$cat->play();//print-- I'm paly with dog

很多人會以爲輸出 I'm paly with cat,但並不是,這是爲什麼呢?
是因爲self關鍵字會在編譯時而非運行時確定其作用域。對於這個問題PHP官方在5.3做了彌補,只需要用static替換self就可以了。

class Animal
{
	public static $name = 'dog';//默認處理狗
	public function paly()
	{
		echo 'I\'m paly with '.static::$name;
	}
}
class Cat extends Animal
{
	public static $name = 'cat';//默認處理狗
	
}
$cat = new Cat();
$cat->play();//print-- I'm paly with cat
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章