opencart中的load类和Registry类及controller分析

来源:互联网 发布:药房进销存软件排名 编辑:程序博客网 时间:2024/05/17 21:12


$registry = new Registry();//启动注册机$load = new load($registry);//load类引用注册机 ->指向reg$registry->set('load', $load);//注册机注册load类$co = new co($registry);//控制器引用注册机 ->指向reg$co->action();//方法中通过load类向注册机里注册了model类,注意:这时控制器里的注册机被改变,因为他们用的是同一个实例$registry/*注册机*/final class Registry {private $data = array();public function get($key) {return (isset($this->data[$key]) ? $this->data[$key] : null);}public function set($key, $value) {$this->data[$key] = $value;}public function has($key) {return isset($this->data[$key]);}}//modelclass modelcampaignhelp{}//控制器class co {protected $registry;function __construct($Registry){$this->registry = $Registry;}public function __get($key) {return $this->registry->get($key);}        public function __set($key, $value) {$this->registry->set($key, $value);}function action(){//print_r($this);$this->load->model('modelcampaignhelp');   print_r($this);exit;}}//loadclass load{function __construct($Registry){$this->registry = $Registry;}function model($class){print_r($this->registry);$this->registry->set($class, new $class);}}exit;

简化版:

class a {private $v = array();public function set($v){$this->v= $v;}}class b1 {function __construct($a){$this->a = $a;$a->set('b1');}}class b2 {function __construct($a){$this->a = $a;$a->set('b2');}}$a = new a();$b1 = new b1($a);$b2 = new b2($a);//由于b2类中改变了注册机$a,所以b1的结果随之改变。print_r($b1);exit;






0 0
原创粉丝点击