PHP抽象类致命错误

PHP抽象类致命错误,php,abstract-class,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->__r

我对抽象类有问题。目前,我使用抽象类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);
    }
}
我对此没有问题,但当我错过一个方法时,我得到了一个致命错误:

致命错误:类MyClass包含1个抽象方法,因此必须声明为抽象或实现其余方法(runnable::\uu setConfig)

我想知道如何在实例化MyClass之前测试runnable的条件是否满足,我已经尝试过了,但再次出现此错误

$reflectionClass = new ReflectionClass($appName);
if($reflectionClass->IsInstantiable()) {
  // OK
} else {
  // Cutom error
}
我怎样才能把它做好


谢谢您的帮助。

您不能,一旦您将类扩展为抽象类,如果它不包含方法(甚至在初始化类之前),它将抛出一个错误

你不能用反射来做这件事,因为正如名字所说,反射只是反射

你可以尝试破解它,这应该是你想做什么的唯一方法


但最后我真的不知道为什么要这样做,为什么不把它扩展到一个普通类而不是一个抽象类?(如果你真的不在乎的话)

在这种情况下,你可以创建一个类似这样的界面:

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);
     }
}

您还可以阅读并且

您正在走一条危险的道路,在您的方法前面加上
\uuu
-PHP保留以两个下划线开头的方法名称