我需要能够使用一个静态变量,该变量在继承基类的类中设置...从基类中访问。
考虑以下代码:
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()
打印出'brown')这个方法运行的很好。但是我的生产服务器运行的是PHP 5.2.11, 所以我需要调整我的脚本。
是否有一种相对简单的解决方法来解决这个问题?
谢谢!
Christoffer
编辑:目标
正如下面所述,这是我试图完成的一个非常简化的例子。如果我向您提供了我用来解决问题的两个选项(以及问题本身),那么有人可能会有不同的解决方案......
我构建了一个基础数据库模型,其中包含函数"find"、"find_by"和"find_all"(所有的函数都是静态的)。
在PHP 5.3中,有一个名为get_called_class()
的函数,我目前使用它来确定被调用类的名称,然后使用它来映射到正确的数据库表。例如,类User
将指向users
。
get_called_class()
在PHP 5.2.x中不存在,我找到的“hack”实现非常不可靠。然后我转向这个在所有模型类中都包含类名的静态变量的选项。
Dog
应该继承Animal
? - Richard JP Le Guen