假设您正在构建一个将在一天内成为打包产品的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
如果存在,它也包括这一点。
显然,用户include必须包含一个类定义,它扩展了core include中的定义。
现在我的问题是,我将如何实例化这样一个类?毕竟,我总是可以肯定有一个定义:
class frontend_core
,但我不能肯定是有
class frontend_user extends frontend_core
不过,我想能够依靠的,实例化,一个类名称,无论是否存在该类的自定义扩展。
有没有一个聪明的方法,想法或模式如何实现这一目标?
当然,我可以写一个简单的工厂辅助函数,看起来对user
类,然后再为core
类,并返回一个初始化的对象,但我真的想保持这个干净和简单越好,因为正如我所说,它将成为一种包装产品。
我正在寻找一种巧妙的技巧或模式,它尽量少用代码,并尽可能少地引入新的功能。
如果没有自定义,我想保留用户目录为空,但另一方面,这是个不错的主意。它为用户提供了简单的入门点,甚至可以在空的类文件中使用代码示例和解释。我会考虑的。 – 2010-03-11 13:20:15
但是,当用户不使用它时,它也增加了多余的类以供加载,例如,当用户选择使用默认值时,User_Frontend加上Core_Frontend而不是Core_Frontend。 – Gordon 2010-03-14 12:45:11