抽象类存在的原因是要指定一个类,它本身永远无法实例化,但它可以规定必须在扩展该抽象类的任何类中定义的所有内容。既然如此,您的抽象类 abs_job 可以定义一个抽象方法,该方法必须在任何类中定义——我们称之为 run - 扩展您的抽象类。然后 abs_job 可以定义一些其他的方法,我们称之为 run_wrapper 可以做一些其他的事情,然后调用 run 函数并绝对确定它是在扩展类中定义的。
这里我写了一个包装函数,abs_job::run_wrapper(),它调用了定义在some_class中的run()方法:
abstract class abs_job {
// you must define this function in any class that extends abs_job
abstract protected function run();
// this is your wrapper function
protected function run_wrapper() {
// do some stuff blah blah
$this->run(); // this function must be defined in the extending class
// do some more stuff blah blah
}
}
然后在一些扩展它的类中:
class some_class extends abs_job {
// you have to define this function in any class extending abs_job
protected function run() {
// blah blah blah
}
}
那么如果你实例化 some_class,你应该可以调用 run_wrapper:
$v = new some_class();
$v->run_wrapper();
编辑:对不够清晰表示歉意。我已经编辑了这篇文章以使其更清晰。