假设您正在构建一个将成为打包产品的Web应用程序,用户希望能够扩展和自定义该应用程序 .
它附带一个核心库,包含包含类的PHP文件:
/library/
/library/frontend.class.php
/library/filesystem.class.php
/library/backend.class.php
现在,假设您要保留用户无法修补的 clean core . 不过,如果需要,您希望用户能够自定义每个螺母和螺栓 .
我目前的想法是创建一个自动加载机制,当一个类被实例化时,首先加载核心包括:
/library/frontend.class.php
然后,它切换到 user 目录并查看是否存在相同名称的包含:
/user/library/frontend.class.php
如果存在,它也包括它 .
显然,用户include必须包含一个类定义,扩展了核心包含中的定义 .
现在我的问题是,我将如何实例化这样的类?毕竟,我总能确定有一个定义:
class frontend_core
但我无法确定是否有
class frontend_user extends frontend_core
但是,我希望能够依赖并实例化 one class name ,无论是否有类的自定义扩展 .
是否有一种聪明的方式,想法或模式如何实现这一目标?
当然,我可以编写一个简单的工厂辅助函数,首先查找 user 类,然后查找 core 类并返回一个初始化对象,但我真的希望尽可能保持清洁和简单,因为正如我所说,它将成为一个包装产品 .
我正在寻找一种使用尽可能少的代码的智能技巧或模式,并尽可能少地引入新功能 .