代码之家  ›  专栏  ›  技术社区  ›  fire

使用singleton方法创建全局对象

  •  0
  • fire  · 技术社区  · 14 年前

    我尝试使用singleton方法访问全局对象(在本例中是它的“用户名”)。我的问题是如何修改这个,以便 DB->connect() 我能做的功能 echo $this->username; 没有 声明$username还是更改最后两行?

    class CI_Base {
    
        private static $instance;
    
        public function CI_Base()
        {
            self::$instance =& $this;
        }
    
        public static function &get_instance()
        {
            return self::$instance;
        }
    }
    
    function &get_instance() {
        return CI_Base::get_instance();
    }
    
    class Foo {
        function run() {
            $CI = & get_instance();
            $CI->username = "test";
            $db = new DB;
            $db->connect();
        }
    }
    
    class DB extends Foo {
        function connect() {
            $CI = & get_instance();
            echo $CI->username;
        }
    }
    
    $foo = new Foo;
    $foo->run();
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   jcubic    14 年前

    class Foo {
      function __get($field) {
        if ($field == "username") {
            //don't need to create get_instance function
            $CI = CI_Base::get_instance(); 
            return $CI->username;
        }
      }
    }
    

    class Foo {
      function __get($field) {
          $CI = CI_Base::get_instance(); 
          return $CI->$field;
      }
    }
    

    class DB extends Foo {
        function connect() {
           // this->username will call __get magic function from base class
           echo this->username;
        }
    }
    

    get_instance