我是PHP新手的C / C ++程序员。 在C / C ++中,我经常向我的项目添加代码(例如调试输出),只有在定义了特定的宏时才会激活它。因此,我可以通过在中央头文件中定义/删除宏定义来“打开/关闭”某些代码。
E.g。在头文件中:
#define ENABLE_DEBUG_OUTPUT
以及代码中有用的地方:
#ifdef ENABLE_DEBUG_OUTPUT
print_debug_output ( ... );
#endif
所以要禁用print-debug_output调用(或其他任何东西),我只需要在头文件中注释#define。
PHP中有一些等价物吗?
首先,我想在我的测试系统上使用FirePHP来调试输出,但是一旦我将代码放在服务器上就禁用它。最好的方法是什么?
答案 0 :(得分:2)
您可以使用本机PHP函数http://www.php.net/define
//Place the below line to your first loading file or any preferred place;
define("ENABLE_DEBUG_OUTPUT", true); //Or false;
//Then use it anywhere:
if( ENABLE_DEBUG_OUTPUT )
print_r($my_debug_var);
答案 1 :(得分:0)
通常你会使用最基本的方式:
$debug = SOME_CONDITIONAL;
if ($debug) {
// display errors/warnings/notices in output
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
}
然后按照您的主要代码预期:
if ($debug) {
/* debugging code */
}
我知道这非常重要,但它很好而且清晰。
答案 2 :(得分:0)
一种可能的方法是将这样的变量放在全局变量中:
$GLOBALS['ENABLE_DEBUG_OUTPUT'] = true;
然后
if (isset($GLOBALS['ENABLE_DEBUG_OUTPUT'])){
echo ...
}
答案 3 :(得分:0)
使用全局调试功能,如:
// $level = 0 nothing - 9 alert with email
function debug($str, $level = 1) {
// Uncomment the following line in NO_DEBUG mode:
//return;
switch ($level) {
case 9:
//mail();
case 8:
case 7:
case 5:
// file_put_contents(); // or whatever
case 3:
echo $str, PHP_EOL;
case 2:
case 1:
case 0: break;
}
}
你可以放入不同的级别并说,如果它的lvl 9发送邮件,则将日志和回声写入屏幕。在lvl 5你只想写一个日志并打印到屏幕上(这就是为什么我不打破每个案例)。
使用像taht这样的函数,你不必包装
if (defined('ENABLE_DEBUG')) {
//...
}
绕过每个调试消息,而只是使用debug('test string');
答案 4 :(得分:0)
你也可以在php中使用常量:
<?php
define('DEBUG', true);
您可以创建一个仅在DEBUG
为真时显示内容的函数
<?php
function debug($obj)
{
if (DEBUG)
{
echo '<pre>';
var_dump($obj);
echo '</pre>';
}
}
我个人使用函数debug($obj, $label)
将函数发送到Firephp
以在firebug控制台中获取调试信息