PHP有一个可以在代码中使用的DEBUG符号吗


Does PHP have a DEBUG symbol that can be used in code?

像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;

这将使得删除调试行变得非常琐碎。

xdump是我个人最喜欢的调试工具之一。

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