具有公共祖先冗余的PHP抽象对象设计
我帮助设计和实现了用PHP编写的DroidAPI。虽然它工作得很好,但我总是希望重构我的代码 在具有共同祖先的其他对象中包含对象可以吗 这可能是一个基本问题,但我似乎找不到信息来支持这是否是一个糟糕的做法 目标是让类foo为所有人提供公共常量和方法 例如:具有公共祖先冗余的PHP抽象对象设计,php,oop,inheritance,object,abstract,Php,Oop,Inheritance,Object,Abstract,我帮助设计和实现了用PHP编写的DroidAPI。虽然它工作得很好,但我总是希望重构我的代码 在具有共同祖先的其他对象中包含对象可以吗 这可能是一个基本问题,但我似乎找不到信息来支持这是否是一个糟糕的做法 目标是让类foo为所有人提供公共常量和方法 例如: abstract class foo { //constants //common methods to all }
abstract class foo {
//constants
//common methods to all
}
class bar extends foo{
//represents something
}
class widget extends foo {
//represents something else
}
class controller extends foo{
//controls flow
public function __construct(){
$this->my_bar= new bar();
$this->my_widget= new widget();
}
}
类bar和widget可能不需要扩展foo,但如果不发送参数,这些对象中的方法将不知道foo知道的常见事情
看起来冗余太多了,只是在寻找最佳实践。如果它对您的应用程序有意义,那么就没有问题 举例来说,这正是PHP的DOM库的结构。几乎所有东西都是一个节点——文档、元素、属性和字符数据。它们都共享祖先
DOMNode
,即使它们彼此嵌套
因此,如果它真的有意义(这在你的抽象例子中很难说),那么绝对没有理由不这样做。事实上,如果各种对象共享功能,这可能是“最佳实践”。创建一个框架需要大量的尝试,这会让你跌倒,然后重新站起来 关于你的问题,最重要的是确保你不会落入利斯科夫替代原则所描述的陷阱: “如果它像鸭子一样嘎嘎作响,看起来像鸭子,但需要电池,它就会 可能是只鸭子,但可能不是。” Liskov原理很简单,请确保在扩展时 有些事,你没有改变班级的合同。如果一个班级 用于返回函数中的某个内容,并对其进行扩展以返回 完全不同的是,用户将如何适应? 因为您提供了 一个类,它标识为它扩展的基类,但它不是 表现得像基类一样,增加了函数性 我最建议的是,您总是尽量使您的类层次结构尽可能现实,但始终记住坚实的原则。有关SOLID的更多信息,请访问我的博客:
祝你好运,谢谢。我正在尝试将我们的店铺转换为OO风格,我希望能有一个良好的开端。谢谢你的回答和链接。