我想创建同一PHP组件的精简版和完整版。当然,我希望两者共享一个共同的代码库——所以如果我发现一个bug,或者添加一个功能,我只需要在一个地方更新它。
在编译语言中,更好的方法是只有一个项目,有多个目标——每个版本一个。在这种情况下,我会使用预处理器宏来识别代码中的产品版本,从而实现基于版本的逻辑决策。
使用PHP,解决这个问题的最佳方法是什么?当然,完整版本的特定代码不要出现在lite版本的PHP文件中是至关重要的,否则精明的开发人员可能会轻松解锁这些功能。
最好的方法是使用OOP。
例如,创建类的基本版本:
class BasicComponent
{
... add basic functionality here
}
创建类的扩展版本:
class FancyComponent extends BasicComponent
{
... add fancy stuff here
}
要么只部署基本版本,要么也部署高级版本。
有很多其他方法可以将OOP用于此目的。我可以想象一个工厂,它可以实例化许多特性,其中每个特性都是一个类,并且您只使用组件的基本版本部署其中的一些特性。
根据我在这个类似问题中的发现,我最终以这种方式解决了问题:
1.我安装了Phing,这是一个基于Apache Ant。
2.我创建了一个build.xml
文件,其中包含以下目标:
<target name="preprocess" depends="prepare">
<foreach param="fname" absparam="abs-fname" target="preprocessfile">
<fileset dir="${build.dir}">
<patternset>
<include name="**/*.php"/>
</patternset>
</fileset>
</foreach>
</target>
<target name="preprocessfile">
<exec command="gcc -E -x c -P -C -D PREMIUM ${abs-fname} -Wno-invalid-pp-token -o ${abs-fname}"
escape="false"
checkreturn="true"
passthru="true" />
</target>
在实践中,我在每个PHP文件上启动GCC预处理器,并利用它来做我需要的事情。它工作得很好!
不仅如此:通过Phing,我创建了一些目标来进行PHP验证、JavaScript缩小、创建要部署的存档等等。