Php 如何有条件地禁用代码

Php 如何有条件地禁用代码,php,macros,Php,Macros,我是一名C/C++程序员,不熟悉PHP。 在C/C++中,我经常将代码添加到我的项目中(例如调试输出),这些代码只有在定义了特定宏时才会激活。因此,我可以通过在中心头文件中定义/删除宏定义来“打开/关闭”一些代码 例如,在头文件中: #define ENABLE_DEBUG_OUTPUT 以及代码中有用的任何地方: #ifdef ENABLE_DEBUG_OUTPUT print_debug_output ( ... ); #endif 因此,要禁用print-debug_输出调用(

我是一名C/C++程序员,不熟悉PHP。 在C/C++中,我经常将代码添加到我的项目中(例如调试输出),这些代码只有在定义了特定宏时才会激活。因此,我可以通过在中心头文件中定义/删除宏定义来“打开/关闭”一些代码

例如,在头文件中:

#define ENABLE_DEBUG_OUTPUT
以及代码中有用的任何地方:

#ifdef ENABLE_DEBUG_OUTPUT
    print_debug_output ( ... );
#endif
因此,要禁用print-debug_输出调用(或其他任何调用),我只需要注释掉头文件中的#define

PHP中是否有一些等价物


首先,我想在测试系统上使用FireHP调试输出,但在将代码放到服务器上后立即禁用它。最好的方法是什么?

通常您会使用最基本的方法:

$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 */
}

我知道这很糟糕,但很好,很清楚。

一种可能的方法是将这样的变量放在全局变量中:

$GLOBALS['ENABLE_DEBUG_OUTPUT'] = true;
然后

if (isset($GLOBALS['ENABLE_DEBUG_OUTPUT'])){
  echo ...
}

您可以使用本机PHP函数


使用全局调试函数,如:

// $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;
    }
}
你可以把它放在不同的级别,比如说,如果它的9级,它会发送一封邮件,写一个日志,然后回显到屏幕上。在5级,你只需要写一个日志并打印到屏幕上(这就是为什么我不会在每一个案例上都打断你)

使用像taht这样的函数,您不必包装

if (defined('ENABLE_DEBUG')) {
    //...
}

环绕每个调试消息,但只需使用
debug('teststring')

您也可以在php中使用常量:

<?php 
  define('DEBUG', true);
'; } }

我个人使用一个函数
debug($obj,$label)
,该函数将此信息发送到
FireHP
以在firebug控制台中获得调试信息

最简单的方法是定义一个常量,例如
debug\u ENABLED
,然后使用
if(debug\u ENABLED)
来测试是否记录;如果这能让事情变得更简单,那么可以在配置文件中定义DEBUG_ENABLED,在ini文件中设置一个变量,并在使用FireHP进行调试的任何地方检查它的开或关。最好将该开关放在与print_DEBUG_输出函数(在问题的示例中)等效的函数中,而不是乱扔
if(调试)
语句贯穿整个代码库。始终提醒echo$var;var_dump($var);这总是有用的(即使有人会对我大喊大叫)。Mark所说的确实是最有效/最简单的。如果您需要更复杂的内容,请查看异常。此外,由于答案并不完全正确,debug应该始终是常量而不是变量。
<?php 
  define('DEBUG', true);
<?php

  function debug($obj)
  {
    if (DEBUG)
    {
      echo '<pre>';
      var_dump($obj);
      echo '</pre>';
    }
  }