从错误的子类调用方法的抽象类

时间:2013-08-07 10:45:47

标签: php class abstract

我有一个抽象类,它由几个其他类扩展,每个类都有一个名为child_save_changes()的抽象方法。

模板类中的一个方法称为on_save_changes(),只要用户单击“提交”,就会从另一个页面调用此方法。

on_save_changes()方法首先设置验证/保存所需的一些类变量,然后调用child_save_changes(),然后最终处理重定向到引用页面。

问题是,因为我通过来自另一个页面的回调调用on_save_changes(),它不知道从哪个子类调用抽象方法child_save_changes(),因此它只是选择它找到的第一个。

在每个child_save_changes()方法中重复代码似乎效率低下,所以我想知道过去是否有人遇到类似的情况,以及他们采取了哪些措施来解决问题?感谢。

1 个答案:

答案 0 :(得分:0)

听起来像你在使用静态方法。否则,您描述的问题无法合理地发生。

你写道,“on_save_changes()不知道从哪个子类调用抽象方法child_save_changes()”。但普通(即非静态)方法不是从类中调用的,而是从对象中调用它们。并且每个对象都确切地知道它属于哪个类,因此永远不会混淆要调用哪个方法。

另一方面,静态方法不适用于这样的继承层次结构。我个人建议重构代码并将其转换为非静态代码,但如果您不想这样做,您可以使用late static binding使其工作。