像C甚至C#这样的语言(技术上没有预处理器)允许您编写如下代码:
#DEFINE DEBUG
...
string returnedStr = this.SomeFoo();
#if DEBUG
Debug.WriteLine("returned string =" + returnedStr);
#endif
这是我喜欢在代码中作为脚手架的一种形式使用的东西,我想知道PHP是否有这样的东西。我确信我可以用变量来模拟这一点,但我认为在大多数情况下解释PHP的事实不会使执行调试代码时自动剥离/删除调试代码变得容易(因为它不需要)。
PHP没有这样的东西。但您肯定可以快速生成一些内容(如果您愿意的话,可以稍后使用regex解析将其剥离)。我会这样做:
define('DEBUG', true);
...
if (DEBUG):
$debug->writeLine("stuff");
endif;
当然,您必须编写自己的调试模块来处理所有这些。如果您想让regex解析变得更容易,也许您可以使用三元运算符:
$str = 'string';
DEBUG ? $debug->writeLine("stuff is ".$str) : null;
这将使得删除调试行变得非常琐碎。
http://freshmeat.net/projects/xdump/
define(DEBUG, true);
[...]
if(DEBUG) echo xdump::dump($debugOut);
它有一个define
函数,记录在这里:http://us.php.net/manual/en/language.constants.php.
考虑到文档中解释的变量和常量之间的差异,我假设PHP的define
允许解释器在编译时消除不可用的代码路径,但这只是猜测。
--Douglas Hunter