gpt4 book ai didi

php - 防止/限制方法继承

转载 作者:行者123 更新时间:2023-12-05 02:24:48 32 4
gpt4 key购买 nike

我有一个应用程序,其中许多对象都扩展了一个抽象类,该抽象类定义了诸如 create() edit() retrieve()delete()。由于每个子类对这些函数使用相同的逻辑,抽象类定义了默认行为,在少数需要扩充的情况下,子类可以覆盖或使用我内置的钩子(Hook)。

现在我遇到了一些子类需要不可变的情况,这意味着它们不应该有 edit()delete()方法。这对我来说听起来像是一个接口(interface)的工作,该接口(interface)的名称类似于 immutable ,不可变类可以实现该名称。问题是接口(interface)不会阻止方法被调用,它们只是强制方法的存在。所以这显然是行不通的。

制作两个父类,一个用于可变对象,一个用于不可变对象(immutable对象)是丑陋的,并且可能会在维护过程中出现问题。我可以让不可变对象(immutable对象)用一个什么都不做的空方法覆盖有问题的方法,但这看起来也很困惑,就像我在那个时候没有做正确的 OOP。

那么,如果允许大量类都继承一组方法,但其中一些类不继承所有方法,那么您建议的最佳方法是什么? (有问题的应用程序是用 php 编写的,但是来自任何语言的一般 OOP 技术仍然有用)。

最佳答案

创建一个不可 rebase 类作为基类的子类。immutable-base 应该实现 final重写 edit() 和 delete(),它们什么都不做或抛出错误。

最后,保证所有不可变的 child 都不能编辑或删除

这个策略的好处

  • 通过测试 instanceof immutable-base 轻松检查对象是否不可变

  • 通过修改它扩展的内容轻松地将对象从不可变更改为不可变并再次变回不可变

关于php - 防止/限制方法继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830623/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com