1

我有一个我正在编写的 PHP 程序,它大约有 200 行代码。它有很多我写的函数,可能有十几个。我想在程序中有一个调试选项,但也希望在所有函数中都可以访问该值。这应该如何以及在哪里定义?

Global $debug_status;

function blah ($message) {
if ($debug_status == "1" ) {
  do something...}
...
}

这是正确的方法吗?谢谢!

4

3 回答 3

3

使用常数。

define('DEBUG', true);

...

if (DEBUG) ...

当然还有更好的调试方法。例如,使用 OOP,将记录器实例注入到每个对象中,调用

$this->logger->debug(...);

要记录消息,请切换记录器的输出过滤器以显示或隐藏调试消息。

于 2013-06-04T06:27:33.633 回答
1

你快到了.... global 关键字将对全局的引用导入当前范围。

$debug_status = "ERROR";

function blah ($message) {
    global $debug_status;
    if ($debug_status == "1" ) {
      do something...}
      ...
    }
于 2013-06-04T06:20:31.717 回答
1

该变量应该在注册表类中定义,这是一种模式。

工作演示

注册表示例

class Registry {
   private static $registry = array();

   private function __construct() {} //the object can be created only within a class.
   public static function set($key, $value) { // method to set variables/objects to registry
      self::$registry[$key] = $value;
   }

   public static function get($key) { //method to get variable if it exists from registry
      return isset(self::$registry[$key]) ? self::$registry[$key] : null;
   }
}

用法

要注册对象,您需要包含此类

$registry::set('debug_status', $debug_status); //this line sets object in **registry**

要获取对象,您可以使用get方法

$debug_status = $registry::get('debug_status'); //this line gets the object from **registry**

这是可以存储每个对象/变量的解决方案。对于您编写的目的,最好使用简单的常量 and define()

我的解决方案适用于应从应用程序中的任何位置访问的各种对象。

编辑

删除了单例和 make get,将方法设置为 @deceze 建议的静态方法。

于 2013-06-04T06:26:14.707 回答