【问题标题】:Wrapper function around an abstract method抽象方法周围的包装函数
【发布时间】:2017-01-10 02:41:40
【问题描述】:

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

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

帮助感激!

谢谢

【问题讨论】:

    标签: php abstract-class


    【解决方案1】:

    抽象类存在的原因是要指定一个类,它本身永远无法实例化,但它可以规定必须在扩展该抽象类的任何类中定义的所有内容。既然如此,您的抽象类 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();
    

    编辑:对不够清晰表示歉意。我已经编辑了这篇文章以使其更清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      相关资源
      最近更新 更多