2011-04-18 268 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,否則不應該這樣做。

相關問題