目前我在 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
to的值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('...');
但我的问题仍然...