在 PHP 中正确实现虚函数?

2022-08-30 19:07:32

在我的工作场所(仅限php),我们有一个用于数据库抽象的基类。如果要将新的数据库表添加到基层,则必须创建此基类的子类并覆盖一些方法来定义使用此表的单个行为。正常行为应保持不变。

现在,我在我们公司看到许多新程序员,他们只是覆盖了默认行为的方法。有些人非常“好”地投入了所有的默认行为,只是在他们喜欢的地方添加了个别的东西,而另一些人则试图使用基类和他们的继承者。

我解决这个问题的第一个想法是考虑应该通过继承类来覆盖的抽象方法。但是,除了其他反对抽象方法的论据之外,“抽象”并没有说明为什么基类不能单独使用,以及为什么应该覆盖这些函数。

经过一些谷歌搜索,我没有找到在php中实现“真实”虚函数的好答案(只是有一个虚函数,这几乎扼杀了具体实现的所有希望)。

那么,你会怎么处理这件事呢?


答案 1

在PHP中,所有公共受保护的函数都是“虚拟的”。您可以通过在 final 关键字前附加来防止覆盖函数。(或者通过将它们保密,但这可能是一个坏主意)。

在基类的设计中,我会想到子类想要影响的行为。例如,我会创建空函数,如before_update()和after_insert()。

function after_insert() {
  // Virtual
}

基类在发生更新/插入事件时将调用它。

也许是一个is_valid()函数,它总是在基类中返回true,并使用注释块来描述子类返回false时的后果。

希望这会给你一些灵感。


答案 2

您始终可以使用“final”关键字来防止在人们以错误的方式使用类时覆盖某些类函数。

在我看来,它们无法实现某些功能,因此覆盖了这些方法。您可能需要查看课程的设计。


推荐