我有一个我正在编写的 PHP 程序,它大约有 200 行代码。它有很多我写的函数,可能有十几个。我想在程序中有一个调试选项,但也希望在所有函数中都可以访问该值。这应该如何以及在哪里定义?
Global $debug_status;
function blah ($message) {
if ($debug_status == "1" ) {
do something...}
...
}
这是正确的方法吗?谢谢!
我有一个我正在编写的 PHP 程序,它大约有 200 行代码。它有很多我写的函数,可能有十几个。我想在程序中有一个调试选项,但也希望在所有函数中都可以访问该值。这应该如何以及在哪里定义?
Global $debug_status;
function blah ($message) {
if ($debug_status == "1" ) {
do something...}
...
}
这是正确的方法吗?谢谢!
使用常数。
define('DEBUG', true);
...
if (DEBUG) ...
当然还有更好的调试方法。例如,使用 OOP,将记录器实例注入到每个对象中,调用
$this->logger->debug(...);
要记录消息,请切换记录器的输出过滤器以显示或隐藏调试消息。
你快到了.... global 关键字将对全局的引用导入当前范围。
$debug_status = "ERROR";
function blah ($message) {
global $debug_status;
if ($debug_status == "1" ) {
do something...}
...
}
该变量应该在注册表类中定义,这是一种模式。
注册表示例
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 建议的静态方法。