【发布时间】:2011-03-02 08:37:51
【问题描述】:
我需要能够使用在类中设置的静态变量,该类从基类扩展基类...。
考虑一下:
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”、“find_by”和“find_all”等函数(都是静态的)。
在 PHP 5.3 中有一个名为 get_called_class() 的函数,我目前使用它来确定被调用类的名称,然后使用它来映射正确的数据库表。前类 User 将指向 users。
get_called_class() 在 PHP 5.2.x 中不存在,我发现的 hack 实现非常不可靠。然后我转向在所有包含类名的模型类中使用静态变量的选项。
【问题讨论】:
-
我认为
Dog应该扩展Animal? -
随着进一步的解释,我认为你应该把你的 find/find by 函数作为方法放在一个表类上,而不是放在一个行类上(这听起来像是你正在尝试的)跨度>
-
Gnarf:是的,这也是我昨晚想出来的。它不那么漂亮,但它会做。
标签: php inheritance