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