Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多实体扩展_Php_Oop_Architecture_Modularity_Conceptual - Fatal编程技术网

Php 多实体扩展

Php 多实体扩展,php,oop,architecture,modularity,conceptual,Php,Oop,Architecture,Modularity,Conceptual,假设我有一个定义实体的类,比如产品 我的框架是在可切换模块中构建的,因此一些模块可能会扩展默认类,即: Module1允许我定义ColoredProduct Module2允许我定义ShapedProduct 如何定义ColoredProduct、ShapedProduct和Product之间的关系?如何确保能够获得动态关系(在没有代码干预的情况下切换一个或另一个) 我是否扩展类产品?我是否在每个子类上引用它 我正在使用PHP。感谢您的输入。这听起来像是在寻找类层次结构: 产品是超类 Co

假设我有一个定义实体的类,比如
产品

我的框架是在可切换模块中构建的,因此一些模块可能会扩展默认类,即:

  • Module1
    允许我定义
    ColoredProduct
  • Module2
    允许我定义
    ShapedProduct
如何定义
ColoredProduct
ShapedProduct
Product
之间的关系?如何确保能够获得动态关系(在没有代码干预的情况下切换一个或另一个)

我是否扩展类产品?我是否在每个子类上引用它


我正在使用PHP。感谢您的输入。

这听起来像是在寻找类层次结构:

  • 产品
    是超类
  • ColoredProduct
    ShapedProduct
    是子类
您不需要额外的代码,因为子类从
Product
超类继承方法和属性

根据您实现模块的方式,也可以使用接口或特性来解决这个问题

如果您的问题更多的是关于设计相关的应用程序模块,那么您可能会感兴趣:


有关如何在PHP中设计独立模块的非常好的示例,您必须查看

在您的案例中,“在没有代码干预的情况下切换一个或另一个”这句话是什么意思?这意味着我可以启用或禁用我的模块。您能否说明在技术上主要如何启用/禁用其中一个模块?在技术上,我有一个数据库表,其中包含已启用模块的列表。“我的界面”根据此表以及“我的模块”文件夹上的状态显示我的模块是否启用。添加模块会动态修改composer自动加载程序,然后加载我的类(
$classLoader->addPsr4…
),那么,我们在哪里找到了这种方法呢?每次代码运行并启动数据库查询以验证当前模块是已启用还是已禁用时。好处是什么?我对子类的唯一问题是,我不确定子类在泛型范围内如何相互作用。我怎样才能同时从这两种行为中获益?无论如何,这可能会强制将我的应用程序逻辑放在正确的位置。感谢允许子类彼此交互,在产品超类中定义交互方法。或者使用事件在发送和接收事件的子类对象之间进行通信。事件模式支持对象的松散耦合,而不是方法的直接调用。同样,Yii2为此提供了一些很好的工具(尽管必须使用wohle框架)。