2009-08-06 101 views
4

有人可以帮助我理解PHP类中的变量/函数继承。PHP函数和变量继承

我的父类有一个被所有子类使用的函数。但是,每个子类都需要在此函数中使用它自己的变量。我想静态地调用子类中的函数。在下面的示例中,将显示“世界”,而不是子类中的值。

任何人都可以解释我如何获得函数来回显子类中的值。我应该使用接口吗?这是否与后期的静态绑定有关(由于使用PHP的5.3.0之前的版本,我无法使用它)?

class myParent 
{ 
    static $myVar = 'world'; 
    static function hello() 
    { 
     echo self::$myVar; 
    } 
} 

class myFirstChild extends myParent 
{ 
    static $myVar = 'earth'; 
} 

class mySecondChild extends myParent 
{ 
    static $myVar = 'planet'; 
} 

myFirstChild::hello(); 
mySecondChild::hello(); 
+0

接口仅仅定义了需要定义的函数,它不会为这样的工作。后期静态绑定是你想要的,但正如你所说,你不能使用它。你究竟需要这种行为?可能有更好的方法来实现它。 – rpjohnst 2009-08-06 01:01:50

回答

2

是的,你不能那样做。 static $myVar的声明不以任何方式相互作用,正是因为它们是静态的,是的,如果你有5.3.0,你可以绕过它,但你不这样做,否则你不能。

我的建议是只使用一个非静态变量和方法。

+0

我决定在孩子的静态函数中创建一个'self'的实例,然后将这些变量存储为非静态的。 – 2009-08-06 01:30:21

0

如果你使用PHP 5.3,这echo语句将工作:

echo static::$myVar; 

但因为这是无法给你,你唯一的(NICE)的选项是使hello()功能静态的。

0

我想静态调用 子类中的函数。

这将真正推动你进入那个麻烦会得到你疯了一天结束前^^(它已经,也许^^)

我会defintly建议使用尽可能少的“static”性能/方法,尤其是如果您尝试使用继承,至少使用PHP < 5.3

而且由于PHP 5.3很新,在几个月之前它可能不会在您的托管服务中可用...

1

你可以像th一样做是:

class myParent 
{ 
    var $myVar = "world"; 
    function hello() 
    { 
     echo $this->myVar."\n";  
    } 
} 

class myFirstChild extends myParent 
{ 
    var $myVar = "earth"; 
} 

class mySecondChild extends myParent 
{ 
    var $myVar = "planet"; 
} 

$first = new myFirstChild(); 
$first->hello(); 

$second = new mySecondChild(); 
$second->hello(); 

此代码打印

earth 
planet