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