如何有条件地禁用代码

时间:2014-01-02 10:44:01

标签: php macros

我是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来调试输出,但是一旦我将代码放在服务器上就禁用它。最好的方法是什么?

5 个答案:

答案 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控制台中获取调试信息