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


PHP:: How to call static method (or property) from extended class?

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

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

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

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

self::$some_property;

如何获得它?

您不应该访问不存在的类中的属性,而依赖于它存在于子类中。父母不能/不应该知道孩子在做什么,它需要反过来。因此,首先,在父级中也声明属性,以便父级在任何情况下都可以访问它。然后,子项可以重写属性的值。为了确保您始终访问执行类的属性,您需要后期静态绑定,通过使用 static 而不是 self 来获取:

static::$some_property; 

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

parent::$some_property;这将使你的代码不太可靠,就像你改变你的类名一样,如果你使用类名,你也必须在这里改变。