在PHP中添加可选的debug / verbose输出,占用空间最小

时间:2015-03-24 14:18:40

标签: php debugging logging verbose

目前我用PHP开发了一个库。该库使用它自己的命名空间。要存储全局(在库的命名空间范围内)设置,我使用静态类,类似于:

class Settings {
    public static $verbose = true;
}

为了使详细输出变得容易和适应性我使用像这样的静态方法:

class Log {
    public static function v($msg) {
        if ( ! Settings::$verbose) { return; }
        echo $msg . "<br>\n";
    }
}

这样我就可以轻松地向我的代码添加详细输出:

Log::v('Answering questions...');
echo '42';

然而,这种方法会产生大量不必要的方法调用,当详细输出被停用时会立即返回。

现在我想通过以下方式改变我的方法:

class Log {

    public static $v = false;

    public static function init() {
        self::$v = Settings::$verbose;
    }

    public static function v($msg) {
        echo $msg . "<br>\n";
    }

}

我将Settings::$verbose的值复制到Log::$v只是因为它更短。现在 - 在调用Log::init()一次之后 - 我的详细输出行如下所示:

Log::$v && Log::v('All questions answered.');

但这条线并不像简单地输入Log::v('')那样简洁。我不想在我想添加有关正在发生的事情的信息时必须输入Log::$v && Log::v('')

我的问题是:是否有另一种方法可以以最小的占用空间添加详细输出? PHP中是否有任何我不知道的内置函数?

为了避免与其他组件发生冲突,我希望将内容保留在库的命名空间中,因此我不想使用像define('V', true)这样的全局常量。

更新:我刚认识到常量可以命名空间,因此我可以将第二种方法更改为:

define(__NAMESPACE__ . '\V', true);
V && Log::v('...');

但我的问题仍然存在......

0 个答案:

没有答案