围绕抽象方法的包装函数

时间:2017-01-10 02:41:40

标签: php abstract-class

我有一个带抽象方法(run())的抽象类(abs_job)。此方法在扩展abs_job的各种类中实现。现在我试图在abs_job类中的run()周围创建一个包装器函数,以添加一些统计信息作为run()执行的时间并记录run()的成功/失败。

有没有办法实现这一点,所以扩展abs_job的所有类都可以免费使用这个包装器。 ?

帮助赞赏!!

由于

1 个答案:

答案 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();
编辑:对于缺乏清晰度表示道歉。我已编辑此帖以使其更清晰。