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

Php 如何从静态方法中访问属性?,php,oop,Php,Oop,这是我的密码: class { $property = "something"; public static function myfunc() { return $this->property; } } 但是PHP抛出了这样一个问题: 不在对象上下文中使用$this 我知道,问题是在静态方法中使用$this->,好的,我将其删除如下: class { $property = "something"; public static

这是我的密码:

class {
    $property = "something";
    public static function myfunc() {
         return $this->property;
    }
}
但是PHP抛出了这样一个问题:

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

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

class {
    $property = "something";
    public static function myfunc() {
         return self::property;
    }
}
但不幸的是,PHP抛出了这一点:

未定义的类常量“属性”


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

通常,您不应该这样做。静态方法无法访问实例字段是有原因的。不过,您可以这样做:

// 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?),并注意可能会给您带来一些麻烦的所有实现细节

无论如何,我不推荐这种方法。使用它的风险自负

解释 如果要在不希望实例化的类中使用不会更改的变量,则需要使用
static
关键字,以便稍后在方法中访问它

此外,还需要为类命名

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

源代码 文档


.

只能从静态方法访问静态属性或类常量,而不能从实例属性访问;如果你想让你的方法访问一个实例属性,为什么你的方法需要是静态的呢?@KhorneHoly-thx,edited@MarkBaker,因为我需要在任何地方调用该方法,而不必为其类创建对象。如果你不想实例化该类,那么就不要将其作为实例属性,而是@sg-我是那些
白痴之一。你没有在这个答案中解释任何事情,你只是在尽可能用最少的努力赢得一些轻松的口碑。你的代码是正确的,但我认为你的答案是错误的。
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 */