2011-04-18 165 views
2

需要自我::范围我有一个简单的基类为什么在这种情况下

class base { 
    function do_something() { 
    $result = helper_function(); 
    return $result; 
} 

private function helper_function() { 
    return 10; 
    } 

} 

然后,我必须从它继承的主类。

class my_class extends base { 
    function __construct() { 
    echo parent::do_something(); 
    } 
} 

为了这个工作,我需要在my_class指定parent::do_something()。我明白这一点,这是有道理的。但是,这段代码会抛出一个错误。为了它的工作,我必须指定:

$result = self::helper_function(); 

对我来说这没有任何意义。因为它让我修改了基类,如果它没有被继承,它将自行工作。似乎与继承模式相矛盾。

也许我只是做错了。任何有识之士将不胜感激!

回答

4

self::前缀通常表示您正在调用父级静态方法。如果这个函数没有在同一个类中声明,但是在你继承该方法的类中,那么你应该使用parent::。通常功能没有具体声明为static不考虑静态。如果您正在调用常规方法,则应该使用$this->

静态和正常方法之间的主要区别在于:

  • 静态方法即使不istanciating类被称为
  • 和创建该类的对象后的正常方法必须被称为

使:

class foo { 
    public function normal() {} 
    public static function static() {} 
} 

foo::static(); // works 
foo::normal() // don't work 
$foo = new foo(); 
$foo->normal(); // works 

参考:

2

,你可以这样做:

function __construct() { 
    echo $this->do_something(); 
    } 

$this是指这一类和任何父

3

的公共或受保护的选项,您需要使用$this->helper_function()。 这是班级的一种方法,因此您必须使用$this来调用它。有了self::,你可以静态调用它,除非函数声明为static,否则不应该这样做。

相关问题