miketwais

work up

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;
            }
        }
    }

?>
View Code

有了这个文件,后面这样使用:

在一个新文件类中继承该类,然后可以直接使用它得全局变量:$this->key;

<?php
class Controller extends coreInit {
/**
     * 初始化 
     */
public function __construct() {
 parent::__construct();
 //注册全局变量,这样在Service和Dao中通过$this->common也能调用Controller中的类
 $this->register_global('common', $this->controller);
}

?>
View Code

这种实现的方式很好,向大师学习了。

posted @ 2015-11-05 17:13  MasonZhang  阅读(507)  评论(0)    收藏  举报