如何从静态方法中访问属性?

时间:2016-12-20 11:39:31

标签: php oop

这是我的代码:

class {
    $property = "something";
    public static function myfunc() {
         return $this->property;
    }
}

但是PHP抛出了这个:

  

不在对象上下文中时使用$ this

我知道,问题是在静态方法中使用$this->,好吧我将其删除如下:

class {
    $property = "something";
    public static function myfunc() {
         return self::property;
    }
}

但遗憾的是PHP抛出了这个:

  

未定义的类常量'属性'

如何访问其中静态方法之外的属性?

2 个答案:

答案 0 :(得分:4)

一般来说,你不应该这样做。出于某种原因,静态方法无法访问实例字段。不过你可以这样做:

// define a static variable
private static $instance;

// somewhere in the constructor probably
self::$instance = $this;

// somewhere in your static method
self::$instance->methodToCall();

请注意,它仅适用于您的类的单个实例,因为静态变量在所有实例(如果有)之间共享。

您还需要添加一堆验证(例如$ instance null?)并注意可能会给您带来麻烦的所有实现细节。

无论如何,我不推荐这种方法。需要您自担风险使用它。

答案 1 :(得分:1)

如果你想使用一个你不想在课堂上改变的变量,你需要使用static关键字,以便稍后在方法中访问它。

此外,您需要为您的班级命名。

最后,如果您没有将关键字指定为protectedpublic,则您可以在该字词外部访问该变量,因此该方法毫无意义。所以我假设您需要一个protected值才能使用该方法来调用该变量。

源代码

class Foo {

    protected static $property = 'something';

    public function getProperty() {

        return self::$property;

    }

}

echo Foo::getProperty(); /* will display : something */
echo Foo::$property; /* change from protected to public to use that syntax */

文档

PHP : classes

PHP : static

PHP : visibility