0

我在子类静态方法中访问父(非静态)属性时遇到问题。我试过这些如下:

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中检查了类似的问题,但我没有得到任何有效的解决方案


PS抱歉错别字,上面的代码是一个虚拟示例

4

3 回答 3

4

您不能从静态方法访问父非静态属性,因为根据定义这是不可能的并且没有意义。

非静态属性在您有对象实例时可用,而您没有任何对象实例。

于 2012-12-16T08:47:59.700 回答
1

也使父母的财产成为静态的。否则当您在静态上下文中时无法访问它。

于 2012-12-16T08:47:47.190 回答
1

显然,静态方法不会知道非静态父属性是什么。它不知道调用对象的哪个实例——所以它不知道对象是父对象。将父道具设置为静态或将子对象的实例传递给方法并调用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)
}
于 2012-12-16T08:53:50.183 回答