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 */