同一 PHP 组件的精简版和完整版
Lite and full version of the same PHP component
我想创建相同 PHP 组件的精简版和完整版。当然,我希望两者共享一个公共代码库——这样,如果我发现一个错误或添加一个功能,我只需要在一个地方更新它。
在编译语言中,更好的方法是只有一个项目,有多个目标——每个版本一个。在那种情况下,我会使用预处理器宏来识别代码中的产品版本,从而根据版本做出逻辑决策。
PHP解决这个问题的最佳方法是什么?当然完整版的具体代码不能出现在精简版的PHP文件中,否则精明的开发者可能会轻松解锁功能。
最好的方法是使用 OOP。
例如,创建 class:
的基本版本
class BasicComponent
{
... add basic functionality here
}
为您的 class 创建扩展版本:
class FancyComponent extends BasicComponent
{
... add fancy stuff here
}
要么只部署基本版本,要么也部署高级版本。
有许多其他方法可以将 OOP 用于此目的。我可以想到一个可以实例化很多功能的工厂,其中每个功能都是一个 class,而您只使用组件的基本版本部署其中的几个。
根据我在this similar question中找到的内容,我终于这样解决了:
1.我安装了Phing,一个PHP项目构建系统或基于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 缩小、创建要部署的存档等等。
我想创建相同 PHP 组件的精简版和完整版。当然,我希望两者共享一个公共代码库——这样,如果我发现一个错误或添加一个功能,我只需要在一个地方更新它。
在编译语言中,更好的方法是只有一个项目,有多个目标——每个版本一个。在那种情况下,我会使用预处理器宏来识别代码中的产品版本,从而根据版本做出逻辑决策。
PHP解决这个问题的最佳方法是什么?当然完整版的具体代码不能出现在精简版的PHP文件中,否则精明的开发者可能会轻松解锁功能。
最好的方法是使用 OOP。
例如,创建 class:
的基本版本class BasicComponent
{
... add basic functionality here
}
为您的 class 创建扩展版本:
class FancyComponent extends BasicComponent
{
... add fancy stuff here
}
要么只部署基本版本,要么也部署高级版本。
有许多其他方法可以将 OOP 用于此目的。我可以想到一个可以实例化很多功能的工厂,其中每个功能都是一个 class,而您只使用组件的基本版本部署其中的几个。
根据我在this similar question中找到的内容,我终于这样解决了:
1.我安装了Phing,一个PHP项目构建系统或基于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 缩小、创建要部署的存档等等。