在PHP中正确实现虚函数?

eri*_*ork 22 php oop polymorphism virtual-functions

在我的工作场所(仅限PHP),我们有一个用于数据库抽象的基类.如果要将新数据库表添加到基础层,则必须创建此基类的子类,并重写某些方法以定义使用此表的各个行为.正常行为应该保持不变.

现在我在我们公司看到了许多新的程序员,他们只是覆盖了默认行为的方法.有些人很擅长放入所有默认行为,只是在他们喜欢的地方添加个别内容,其他人则试图使用基类及其继承者.

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

经过一些谷歌搜索后,我没有找到一个很好的答案在PHP中实现"真正的"虚拟功能(只是有一个虚拟功能,几乎杀死了具体实现的所有希望).

那么,你会对这件事做些什么呢?

Bob*_*ger 33

在PHP中,所有公共受保护的功能都是"虚拟的".您可以通过添加final关键字来阻止函数被覆盖.(或者将它们设为私有,但这可能是一个坏主意).

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

function after_insert() {
  // Virtual
}
Run Code Online (Sandbox Code Playgroud)

更新/插入事件发生时,基类将调用哪个.

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

希望这会给你一些灵感.


小智 5

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

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