如何在php中访问静态方法中的父非静态属性?

时间:2012-12-16 08:43:59

标签: php static-methods non-static

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

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。抱歉打字错误,上面的代码是一个虚拟的例子

3 个答案:

答案 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)
}