我有一个我正在编写的PHP程序,大约有200行代码。它有很多我写的函数,可能有十几个。我希望在程序中有一个调试选项,但希望该值也可以在所有函数中访问。这应该如何定义,应该在哪里定义?
Global $debug_status;
function blah ($message) {
if ($debug_status == "1" ) {
do something...}
...
}这是正确的方法吗?谢谢!
发布于 2013-06-04 14:27:34
使用常量。
define('DEBUG', true);..。
if (DEBUG) ...当然,还有更好的调试方法。例如,使用OOP,在每个对象中注入一个记录器实例,调用
$this->logger->debug(...);若要记录消息,请切换记录器的输出筛选器以显示或隐藏调试消息。
发布于 2013-06-04 14:20:32
你就快到了..。global关键字将对全局的引用导入到当前作用域中。
$debug_status = "ERROR";
function blah ($message) {
global $debug_status;
if ($debug_status == "1" ) {
do something...}
...
}发布于 2013-06-04 14:26:15
该变量应该在Registry类中定义,这是一种模式。
Working demo
注册表的示例
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**这是每个对象/变量都可以存储在其中的解决方案。为了达到您所写的目的,最好使用简单常量和define()。
我的解决方案适用于应该从应用程序中的任何位置访问的每一种对象。
编辑
删除了singleton和make get,按照@deceze的建议将方法设置为静态方法。
https://stackoverflow.com/questions/16911004
复制相似问题