我一直致力于Cgiapp路线图,尤其是插件架构。我一直假设我必须制作特定于PHP5的版本(Cgiapp2)才能允许此功能。然而,事实证明我错了。
PHP从PHP4开始就具有重载功能,并且从4.3.0开始就在标准构建中。事实证明,为了让插件在PHP4中工作(通过__call()
魔术重载方法工作),我必须做的唯一不同的事情就是打开函数的重载(通过overload()函数,如果可用),并寻找全局$CGIAPP_PLUGINS
变量(而不是静态类)。
在此过程中,我开始评估对Cgiapp2的需求。
事实证明,我可以在PHP4中完成我为Cgiapp2路线图计划的大量工作……这在很大程度上消除了对Cgiapp2的需求。但是,有些事情我可以使用PHP5技术做得更优雅或更好——例如测试运行模式中的错误和重载。
我的决定是创建一个单独的类Cgiapp5
,它继承自Cgiapp
并根据需要重写方法。目前,它取消设置$CGIAPP_PLUGINS
变量(因为不必要),覆盖run()
方法(使用异常处理而不是PHP的错误处理),并覆盖__call()
方法(使用类静态属性而不是全局变量)。到目前为止,单元测试显示这两个版本都可以工作并且兼容。
我喜欢这种开发模式的一点是,我现在可以为PHP4用户添加一些强大的功能——我敢肯定,在PHP5获得动力之前,他们将在一段时间内成为最大的用户群。但是,与此同时,我可以在不牺牲向后兼容性的情况下处理PHP5的更多动态开发。
缺点是开发人员没有动力编写forCgiapp5而不是Cgiapp—这就是未来。但是,在这一点上,我希望面向更多的开发人员而不是更少的开发人员。
发表评论,让我知道Cgiapp应该采取的方向。