我有一个带抽象方法(run())的抽象类(abs_job)。此方法在扩展abs_job的各种类中实现。现在我试图在abs_job类中的run()周围创建一个包装器函数,以添加一些统计信息作为run()执行的时间并记录run()的成功/失败。
有没有办法实现这一点,所以扩展abs_job的所有类都可以免费使用这个包装器。 ?
帮助赞赏!!
由于
答案 0 :(得分:1)
抽象类存在的原因是指定一个不能自己实例化的类,但它可以规定必须在任何扩展该抽象类的类中定义的所有东西。在这种情况下,您的抽象类 abs_job 可以定义一个抽象方法,必须在任何类中定义 - 让我们称之为运行 - 扩展您的抽象类。然后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();
编辑:对于缺乏清晰度表示道歉。我已编辑此帖以使其更清晰。