我有一个带有变量$x的类,我想在他的子类的静态函数中使用它。
class people{
protected $x;
function __constructor(){
$this->x = 'cool';
}
}
class person extended people {
function static status() {
'Here I want to use the x variable. I tried $this->x,parent::x..';
}
}
这显然是不可能的,因为在静态方法内部没有引用对象。这就是静态方法的全部意义:能够独立于实例化对象使用它。但如果没有这样的对象,显然就没有属性$x
。。。
有几个选择,你选择哪一个取决于你的情况:
-
如果您有权访问类
people
的实例化对象的属性,则可以将该值作为显式参数(因此为静态function status($x)
)移交给。 -
您可以在类内将属性声明为
static const
。在这种情况下,您显然可以从静态类方法中进行访问。然而,它显然是一个可以初始化的常数,但不能随着时间的推移而改变其值。 -
您可以在类的外部设计属性。是的,这是显而易见的,并且改变了类设计的要点。但是,由于您已经尝试使用静态方法,因此该方法可能根本不应该依赖于任何实例化的对象。。。
一般来说,你遇到的问题表明你的类设计不是决定性的,在当前状态下本身没有意义。你将不得不重新设计这个类(或者可能是一个更大的体系结构)。
首先问自己一个问题:"为什么你想让方法status()
静态?"