jchook / phpp
PHP 预处理器,支持类似 C 的 #include 指令
v1.0.0-rc2
2021-08-28 02:32 UTC
Requires
- php: >=7.0
This package is not auto-updated.
Last update: 2024-09-22 15:42:38 UTC
README
使用 #include
指令编写 PHP 模板,这些指令类似于由 C 预处理器处理的指令。
还可以可选地评估 <?php ?>
块。
安装
如果您想使用 composer
composer require-dev jchook/phpp
或 下载 phar 并将其包含在项目中
示例
创建一个可以包含类似于 cpp 的 #include 指令和/或 PHP 模板的文件。
Dockerfile.in
FROM alpine:3.14 #include "php.dockerfile" #include "runit.dockerfile"
然后运行脚本构建它,类似于 cpp。
phpp -o Dockerfile Dockerfile.in
命令行使用
USAGE
phpp [options] PATH...
OPTIONS
-h, --help Show this help info
-o PATH Output processed file to PATH. (multi)
-I PATH Look here for included files (multi)
--ext Look for files with this extension (multi)
--eval Evaluate PHP in included files
-v Verbose mode
标记为 (multi) 的选项可以多次调用。
PHP 接口
请参阅源代码以获取更多信息。以下是一个简单的示例
<?php use Jchook\Phpp\Preprocessor; $pre = new Preprocessor(); $pre->makeFile('Dockerfile.in');
动机
Dockerfile 不允许您 INCLUDE
其他 Dockerfile。这是一个 已知并被接受的限制。
有人建议 使用 cpp 来转换 #include 指令,但这存在一些关键问题
- 不能使用正常的 # 注释,因为 ccp 会引发错误
- cpp 手册警告说不要将其用于非 C 代码
这个工具利用 PHP(一种强大的图灵完备模板语言)提供了一个完整的模板解决方案,并具有熟悉的 #include 快捷方式。
为什么不使用普通的 PHP 呢?
考虑以下两个在 Dockerfile 中并排的示例
# PHP include: #<?php include __DIR__ . '/thing.dockerfile' ?> # CPP-like include #include "thing.dockerfile"
仅使用 "PHP" 会呈现一些尴尬的怪癖
-
理想情况下,您可以取消注释 include 行以避免在代码编辑器/IDE 中引发语法错误或奇怪的突出显示问题。
-
取消注释 include 行意味着被包含文件的第一行将被取消注释。
-
没有自动的纸迹显示输出文件中哪些代码来自哪个包含。
-
更复杂的语法,需要更多的显式包含路径。
注意事项
如果您的 Dockerfile 或类似代码中包含字符串 <?php
,PHP 将会解释它。如果您不希望这种行为,请确保至少转义一个字符或禁用 eval
模式。