2011-02-17 117 views
1
abstract class MyAbstractClass{ 
    abstract protected function doSomeThing(); 
    function threeDots(){ 
     return "..."; 
    } 
} 
class MyClassA extends MyAbstractClass{ 
    protected function doSomeThing(){ 
     $this->threeDots(); 
    } 
} 
$myclass = new MyClassA(); 
$myclass->doSomething(); 

返回致命錯誤,這是正在被吐盡了「致命錯誤:在第10行test.php的背景下呼籲保護的方法MyClassA :: DoSomething的()」的錯誤。 Iam試圖知道這個錯誤的原因。這是爲什麼抽象類在PHP

+1

需要指出的是,這個問題來自Zend 5.3認證考試的免費學習指南,您可以從http://www.zend.com/services/certification/下載(下載網址http:// downloads .zend.com /引導/ PHP5.3/PHP_5-3_Study_Guide_v1a.pdf) – 2012-01-13 18:59:02

回答

3

聲明該函數DoSomething的被proteced,這意味着它只能父類,子類或自身內部使用。你在之外使用它。

你可以嘗試改變

abstract protected function doSomeThing(); 

abstract public function doSomeThing(); 

protected function doSomeThing(){ 

public function doSomeThing() { 
2

保護裝置,該方法是在類中並提供類,繼承這個類。如果你想從「外部」調用它,你應該使用Public。

+0

+1應當補充,雖然你是從*調用PHP文件是*類之外。 – weltraumpirat 2011-02-17 18:44:38

1

的方法是保護你不能調用類超出這個方法和由此類繼承的類。

設爲公開,如果你想在類的外部調用。

相關問題