这是我的代码:
class {
$property = "something";
public static function myfunc() {
return $this->property;
}
}
但是PHP抛出了这个:
不在对象上下文中时使用$ this
我知道,问题是在静态方法中使用$this->
,好吧我将其删除如下:
class {
$property = "something";
public static function myfunc() {
return self::property;
}
}
但遗憾的是PHP抛出了这个:
未定义的类常量'属性'
如何访问其中静态方法之外的属性?
答案 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
关键字,以便稍后在方法中访问它。
此外,您需要为您的班级命名。
最后,如果您没有将关键字指定为protected
或public
,则您可以在该字词外部访问该变量,因此该方法毫无意义。所以我假设您需要一个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 */