Я хотел бы создать облегченную и полную версию одного и того же компонента PHP. Конечно, мне бы хотелось, чтобы оба имели общую базу кода — поэтому, если я нахожу ошибку или добавляю функцию, мне нужно обновить ее только в одном месте.
В скомпилированном языке лучший подход состоит в том, чтобы иметь только один проект с несколькими целями — по одному для каждой версии. В этом случае я использовал бы макросы препроцессора для определения версии продукта в коде, что позволило бы принимать логические решения в зависимости от версии.
С PHP, как лучше всего решить эту проблему? Конечно, важно, чтобы конкретный код полной версии не появлялся в файлах PHP облегченной версии, иначе проницательный разработчик может легко разблокировать функции.
Лучший способ — использовать ООП.
Например, создайте базовую версию вашего класса:
class BasicComponent
{
... add basic functionality here
}
создать расширенную версию вашего класса:
class FancyComponent extends BasicComponent
{
... add fancy stuff here
}
Разверните либо только базовую версию, либо модную версию.
Есть много других способов использовать ООП для этой цели. Я могу представить себе фабрику, которая могла бы создавать множество функций, где каждая функция является классом, и вы развертываете только несколько из них с базовой версией вашего компонента.
На основании того, что я нашел в этот похожий вопрос Я наконец решил так:
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>
На практике я запускаю препроцессор GCC для каждого файла PHP и использую его, чтобы делать именно то, что мне нужно. Это работает очень хорошо!
Не только: через Phing я создал несколько целей для проверки PHP, минимизации JavaScript, создания архива для развертывания и многого другого.