PHP抽象类致命错误

时间:2014-01-13 14:23:27

标签: php abstract-class

我遇到了抽象类的问题。目前我使用抽象类runnable来确定我的API需要工作。

abstract class runnable {
    abstract protected function __setConfig();
    abstract public function __run(api $api);

    public function run(api $api){
        $this->__setConfig();
        $this->__run($api);
    }
}

我没有遇到这个问题,但是当我错过了一种方法时,我得到了这个致命的错误:

Fatal error: Class MyClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (runnable::__setConfig)

我想知道如何在instanciate MyClass之前测试runnable的条件是否满足,我已经尝试了ReflectionClass::isInstantiable但我又得到了这个错误......

$reflectionClass = new ReflectionClass($appName);
if($reflectionClass->IsInstantiable()) {
  // OK
} else {
  // Cutom error
}

我怎样才能做得好?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你不能,一旦你将你的类扩展为抽象,如果它不包含方法(即使在启动类之前),它将抛出一个错误。

你不能用反射做,因为只有反射就像名字所说的那样。

你可以尝试用runkit破解它,它应该是你想要的唯一方法。

但最后我真的不知道为什么你需要这样做,为什么不把它扩展到普通类而不是抽象类呢? (如果你真的不关心它)

答案 1 :(得分:0)

对于这种情况,您可以创建类似的接口:

interface runnableInterface {
   public function run(api $api);
   public function setConfig();
}

abstract class runnableAbstract implement runnableInterface {
    public function run(api $api){
        $this->setConfig();
        $this->run($api);
    }
}

class runnable extends runnableAbstract implement runnableInterface {
     public function setConfig() {
         // do something here
     };
     public function run(api $api){
        $this->setConfig();
        $this->run($api);
     }
}

另外,您可以阅读Object InterfacesClass Abstraction