将变量传递给子类内的静态函数

时间:2016-05-18 16:33:22

标签: php class

我有一个带有变量$ 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..';
 }
}

1 个答案:

答案 0 :(得分:0)

这显然是不可能的,因为静态方法中没有引用的对象。这是静态方法的重点:能够独立于实例化对象使用它。但是如果没有这样的对象,你显然没有属性$x ...

有一些替代方案,您选择的方案取决于您的情况:

  1. 您可以将值作为显式参数移交(静态function status($x)), if ,您可以访问类{{1}的实例化对象的属性}。

  2. 您可以在类中声明属性为people。在这种情况下,您显然可以从静态类方法中进行访问。然而,它显然是一个可以初始化的常量,但不能随时间改变其值。

  3. 您可以在外面设计该属性。是的,这很明显,改变了班级设计的重点。但是既然你已经尝试使用静态方法,那么这个方法根本不应该依赖任何实例化的对象......

  4. 一般来说,你可以说你遇到的问题表明你的类设计并不是决定性的,在它当前状态下本身并没有意义。你将不得不重新设计这个类(或者更大的架构)。

    首先问自己一个问题:" 为什么你想让方法static const保持静态?"