Lite和完整版的相同PHP组件

时间:2015-04-07 12:02:03

标签: php preprocessor

我想创建一个相同PHP组件的精简和完整版本。当然我希望两者共享一个共同的代码库 - 所以如果我发现错误或添加功能,我只需要在一个地方更新它。

在编译语言中,更好的方法是只有一个项目,具有多个目标 - 每个版本一个。在这种情况下,我将使用预处理器宏来识别代码中的产品版本,从而根据版本启用逻辑决策。

使用PHP,解决此问题的最佳方法是什么?当然,完整版的特定代码不会出现在Lite版本的PHP文件中,否则精明的开发人员可能会轻松解锁这些功能。

2 个答案:

答案 0 :(得分:2)

最好的方法是使用OOP。

例如,创建班级的基本版本:

class BasicComponent
{
    ... add basic functionality here
}

创建班级的扩展版本:

class FancyComponent extends BasicComponent
{
    ... add fancy stuff here
}

只部署基本版本或花哨版本。


为此目的,还有很多其他方法可以使用OOP。我可以想到一个可以实例化很多功能的工厂,其中每个功能都是一个类,并且只使用组件的基本版本部署其中一些功能。

答案 1 :(得分:0)

根据我在this similar question中找到的内容,我终于解决了这个问题:

1。我安装了Phing,一个基于Apache Ant的PHP项目构建系统或构建工具。

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