【问题标题】:Abstract class calling a method from the wrong child class抽象类从错误的子类调用方法
【发布时间】:2013-08-07 10:45:46
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您所描述的内容听起来不像 OOP 抽象的传统实现。抽象类没有子类,因为它包含多个自身的继承实例。
  • @Flosculus - 我在Pastebin 中添加了一个基本示例,说明我正在做什么。我相信我的问题是 on_save_changes() 被独立调用,而不是从一个子类中调用。这是否符合您对 OOP 抽象的期望,还是我走错了路?谢谢。

标签: php class abstract


【解决方案1】:

在我看来,您使用的是静态方法。否则您描述的问题无法合理发生。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 2013-09-17
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多