同一 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 缩小、创建要部署的存档等等。