强制子类覆盖PHP中的特定函数

时间:2013-05-30 17:36:57

标签: php oop

我正在用PHP创建一个报告库,并开发了一个名为 ReportView 的抽象类。这将提供报告的基本功能,如生成页眉和页脚,创建参数表单。

此类中将有另一个名为 generate_report 的函数。目前它在抽象类中是空的,因为在这个级别我们不知道报告的内容。此外,它还包含一个渲染函数,该函数调用此generate_report函数并将输出发送到浏览器。

  

因此,只要子类继承自ReportView,它就必须实现   generate_report方法,否则PHP必须给出错误。是否有任何关键字或方法可以强制执行特定功能。

3 个答案:

答案 0 :(得分:22)

执行以下操作:

abstract class ReportView {
  abstract protected function generate_report();

  // snip ...

}

class Report extends ReportView {
  protected function generate_report() { /* snip */ }
}

任何扩展ReportView且不是抽象的类必须实现generate_report(以及其超类中的任何其他抽象函数)。

答案 1 :(得分:5)

听起来你最好创建一个接口,这会强制你在类中定义那些然后实现这个接口的方法。

<?php
interface ReportInterface {
    public function generate();
}

class MyReportClass implements ReportInterface {
}

在此处实例化MyReportClass会产生致命错误,告诉您generate()尚未实施。

编辑:您还可以创建实现此界面的抽象类。您可以让您的抽象类包含所有扩展类所需的任何方法,并让您的接口定义您需要通过扩展类来定义的任何方法。

答案 2 :(得分:1)

您还需要将方法声明为abstract(并且不要给它一个方法体),否则不会强制派生类实现它。

或者,您可以实现该方法但只是抛出异常(不确定为什么要这样做)。

最后,如果 all 基类中的方法是“抽象”(没有实体),那么您可以将该类转换为接口。