我正在PHP中创建一个报告库,并开发了一个名为ReportView的抽象类。这将提供报表的基本功能,如生成页眉和页脚,创建参数表单。
在这个类中还有一个名为generate_report的函数。目前它在抽象类中是空的,因为在这个层次上我们不知道报告的内容。此外,它还包含一个render函数,该函数调用generate_report函数并将输出发送到浏览器。
所以我需要当子类从ReportView继承时它必须实现generate_report方法,否则PHP必须给出错误。是否有任何关键字或方法,通过它我们可以强制实现一个特定的功能。
执行以下操作:
abstract class ReportView {
abstract protected function generate_report();
// snip ...
}
class Report extends ReportView {
protected function generate_report() { /* snip */ }
}
任何扩展ReportView
而不是抽象的类必须实现generate_report
(以及它的超类中的任何其他抽象函数)。
听起来您最好创建一个接口,它将强制您在类中定义这些方法,然后实现该接口。
<?php
interface ReportInterface {
public function generate();
}
class MyReportClass implements ReportInterface {
}
在此实例化MyReportClass
将抛出致命错误,告诉您generate()
尚未实现。
Edit:您还可以创建实现此接口的抽象类。您可以让您的抽象类包含所有扩展类需要的任何方法,并让您的接口定义您需要由扩展类定义的任何方法。
您还需要将该方法声明为abstract
(并且不要给它一个方法体),否则派生类将不会强制实现它。
或者,您可以实现该方法,但让它只抛出一个异常(不确定为什么要这样做)。
最后,如果基类中的所有方法都是"抽象的"(没有主体),那么你可以将该类改为接口。