您可以在源文件重写的帮助下复制类似 C 的宏。
写文件 :macro.php
<?php
$name = $_SERVER['PHP_SELF'];
$name = preg_replace('#\/#mui', '', $name);
$file = file_get_contents($name);
// get defined macros
preg_match_all('#\#macro\h+(\w+)\h+(.*)$#mui', $file, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
// delete macro definition
$file = str_replace($m[0], '', $file);
// substitute macro => value
$file = str_replace($m[1], $m[2], $file);
}
// save processed file
$new_name = '/var/tmp/' . $name . '.pr';
file_put_contents($new_name, $file);
include_once $new_name;
exit;
现在有了这样的工具,使用起来很简单:
<?php
include_once "macro.php";
#macro DEBUG_INFO ;echo('<b> DEBUG_INFO: __FILE__ : ' . __FILE__ . ';__LINE__ : ' . __LINE__ . '</b>')
echo '<br>'.(1/2); DEBUG_INFO;
echo '<br>'.(1/0); DEBUG_INFO;
echo '<br>'.(0/0); DEBUG_INFO;
执行输出时:
0.5 DEBUG_INFO: 文件 : /var/tmp/test.php.pr;行 : 7
INF DEBUG_INFO: FILE : /var/tmp/test.php.pr;行 : 8
NAN DEBUG_INFO: FILE : /var/tmp/test.php.pr;行 : 9
我有很强的C背景,总是想念PHP中类似C的宏。但希望我们能为它注入某种替代品。