2011-02-17 118 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

的方法是保护你不能调用类超出这个方法和由此类继承的类。

设为公开,如果你想在类的外部调用。

相关问题