PHP框架中的单例模式和全局变量
最近在看InitPHP框架,框架很清晰,对整个框架的设计也很周全,先感谢InitPHP的开源。
在看的过程中发现框架的设计思路很巧妙。将全局变量存储在单例对象中,这样不仅实现了整个系统全局的引用,而且避免了global带来的开发维护不便的弊端。
下面看一下实现的原理,做了记录,便于学习。
一般的单例模式实现可以参考文章
 
<?php class coreInit { protected static $instance = array(); //单例容器 /** * 初始化 */ public function __construct() { $this->run_register_global(); //注册全局变量 } /** * 注册到框架全局可用变量 * @param string $name 变量名称 * @param val $value 变量值 */ public function register_global($name, $value) { self::$instance['global'][$name] = $value; $this->$name = $value; } /** * 运行全局变量 */ private function run_register_global() { if (isset(self::$instance['global']) && !empty(self::$instance['global'])) { foreach (self::$instance['global'] as $key => $value) { $this->$key = $value; } } } ?>
有了这个文件,后面这样使用:
在一个新文件类中继承该类,然后可以直接使用它得全局变量:$this->key;
 
<?php class Controller extends coreInit { /** * 初始化 */ public function __construct() { parent::__construct(); //注册全局变量,这样在Service和Dao中通过$this->common也能调用Controller中的类 $this->register_global('common', $this->controller); } ?>
这种实现的方式很好,向大师学习了。


 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号