PHP ::如何从扩展类调用静态方法(或属性)?

时间:2012-08-12 10:56:28

标签: php oop static

我有模型类和 Model_Something 类。 Model_Something 具有静态属性(表名)。

我想从模型类访问 Model_Something 静态属性。 但它试图在模型类中找到它并给我例外:

ErrorException [ Fatal Error ]: 
Access to undeclared static property: Model::$_collection_name

我尝试以这种方式访问​​它:

self::$some_property;

如何获得它?

2 个答案:

答案 0 :(得分:3)

您不应该访问不存在的类中的属性,并且该属性取决于它在子级中的存在。父母不能/不应该知道孩子做了什么,它需要反过来。首先,在父级中声明属性,因此父级可以在任何情况下访问它。然后,孩子可以覆盖属性的值。为了确保您始终访问正在执行的类的属性,您需要 late static binding ,这是使用static而不是self获得的:

static::$some_property; 

http://php.net/manual/en/language.oop5.late-static-bindings.php

答案 1 :(得分:-1)

parent :: $ some_property; 它会使您的代码更不可靠,就像您更改类名一样,如果您使用类名,也必须在此更改。