我需要能夠使用一個靜態變量設置在擴展基類的類中...從基類。PHP 5.2中的類繼承:在擴展類中重寫靜態變量?
考慮一下:
class Animal {
public static $color = 'black';
public static function get_color()
{
return self::$color;
}
}
class Dog extends Animal {
public static $color = 'brown';
}
echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'
這奇妙的作品在PHP 5.3.x(Dog::get_color()
打印 '棕'),因爲它具有後期靜態綁定。但我的生產服務器運行PHP 5.2.11,所以我需要修改我的腳本。
是否有幾分姿色的解決方法來解決這個問題?
乾杯!
克里斯托弗
編輯:我們的目標
如下文所述,這是什麼,我試圖完成一個很簡單的例子。如果我爲你提供我已經習慣瞭解決我的問題的兩個選項(和問題本身)的人可能比我不同的解決方案......
我已經建立了一個包含樣功能的基礎數據庫模型「發現」 ,「find_by」和「find_all」(全部是靜態的)。
在PHP 5.3中有一個叫做get_called_class()
的函數,我目前使用它來確定被調用類的名字,然後用它來映射正確的數據庫表。 Ex類User
將指向users
。
get_called_class()
不PHP 5.2.x存在,黑客實現我發現是非常不可靠的。然後我轉向在包含類名的所有模型類中使用靜態變量的選項。
我想'Dog'應該擴展'Animal'? – 2010-06-10 19:41:25
你是絕對正確的:) – Christoffer 2010-06-10 19:42:04
隨着進一步的解釋,我認爲你應該把你的find/find函數看作是一個表類的方法而不是行類的靜態方法(這聽起來像是你正在嘗試的結果 – gnarf 2010-06-11 16:29:46