2

目前我在 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::$verboseto的值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('...');

但我的问题仍然...

4

0 回答 0