我在子类静态方法中访问父(非静态)属性时遇到问题。我试过这些如下:
class Parent
{
protected $nonStatic;
// Other methods and properties
}
class Child extends Parent
{
public static function staticFunc()
{
$test = $this->nonStatic; # Using $this when not in object context
$test = self::$nonStatic; # Access to undeclared static property
$test = parent::$nonStatic # Access to undeclared static property
}
}
我在stackoverflow中检查了类似的问题,但我没有得到任何有用的解决方案
P.S。抱歉打字错误,上面的代码是一个虚拟的例子
答案 0 :(得分:4)
您无法从静态方法访问父非静态属性,因为根据定义它是不可能的,没有任何意义。
当您拥有对象实例时,非静态属性仅可用,而您没有。
答案 1 :(得分:1)
使父母的财产也是静态的。 否则在静态上下文中无法访问它。
答案 2 :(得分:1)
显然静态方法不知道非静态父属性是什么。它不知道调用对象的实例是什么 - 所以它不能知道父对象。将父prop设置为static或将子对象的实例传递给方法并调用passedChildObject.parentProp
public static function staticFunc(Child c)
{
//should give you passed instance parent prop
return c.$nonStatic
}
现在你需要财产..
{
//assume x is already initialized, this is just for clarity
Child x;
returnedProp = x.staticFunc(x)
}