2016-05-18 146 views
0

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

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

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

  1. 可以将该值交出作为一个明确的参数(如此静态function status($x)),如果您有权访问类people的实例化对象的属性。

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

  3. 你可以设计那个属性以外的这个类。是的,这很明显,改变了课堂设计的重点。但既然你已经尝试使用一个静态方法有机会,这种方法不应该依赖于任何所有实例化对象...

一般人能说你跑进问题表明你的类设计没有定论,在目前的状态下本身并不合理。你将不得不重新设计类(或者更大的体系结构)。

首先问自己一个问题:“为什么是否要使方法status()保持静态?

+0

谢谢你,有用的信息,现在我知道它是没有意义的保持静态功能。 – Duveral