我有一个带有变量$ 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..';
}
}
答案 0 :(得分:0)
这显然是不可能的,因为静态方法中没有引用的对象。这是静态方法的重点:能够独立于实例化对象使用它。但是如果没有这样的对象,你显然没有属性$x
...
有一些替代方案,您选择的方案取决于您的情况:
您可以将值作为显式参数移交(静态function status($x)
), if ,您可以访问类{{1}的实例化对象的属性}。
您可以在类中声明属性为people
。在这种情况下,您显然可以从静态类方法中进行访问。然而,它显然是一个可以初始化的常量,但不能随时间改变其值。
您可以在外面设计该属性。是的,这很明显,改变了班级设计的重点。但是既然你已经尝试使用静态方法,那么这个方法根本不应该依赖任何实例化的对象......
一般来说,你可以说你遇到的问题表明你的类设计并不是决定性的,在它当前状态下本身并没有意义。你将不得不重新设计这个类(或者更大的架构)。
首先问自己一个问题:" 为什么你想让方法static const
保持静态?"