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


Passing variable to a static function inside subclass

我有一个带有变量$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。。。

有几个选择,你选择哪一个取决于你的情况:

  1. 如果您有权访问类people的实例化对象的属性,则可以将该值作为显式参数(因此为静态function status($x))移交给

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

  3. 您可以在类的外部设计属性。是的,这是显而易见的,并且改变了类设计的要点。但是,由于您已经尝试使用静态方法,因此该方法可能根本不应该依赖于任何实例化的对象。。。

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

首先问自己一个问题:"为什么你想让方法status()静态?"