lumen-ioc容器测试 (1)
代码
<?php Class Ioc { //设置全局的已经绑定过的 private $set = []; // 存储已经解析对象 private $parsed = []; public function set($name,$value) { $this->set[$name] = $value; } public function get($name){ if(!isset($this->set[$name])){ return false; } // 如果没有解析过 那就解析一下 if(empty($this->parsed[$name])){ $this->parsed[$name] = $this->set[$name](); // 用括号表示执行回调 才是对象 } return $this->parsed[$name]; } } $ioc = new Ioc(); $ioc->set("redis",function(){ $redis = new Redis(); $redis->connect("127.0.0.1",6379); return $redis; }); $ioc->set("mysql",function(){ $pdo = new PDO("mysql:host=127.0.0.1;", "root", "root"); return $pdo; }); $redis = $ioc->get("redis"); $mysql = $ioc->get("mysql"); echo "<hr>"; echo "<pre>"; echo "ioc容器打印<br>"; var_dump($ioc); echo "<hr>"; echo "<pre>"; echo "两个资源打印<br>"; var_dump($redis); var_dump($mysql); echo "<hr>"; echo "<pre>"; echo "设置redis测试<br>"; $redis->set("name",'six'); var_dump($redis->get("name")); echo "<hr>"; echo "<pre>"; echo "查看同时取出多个redis实例化了几个对象<br>"; var_dump($ioc->get("redis")); var_dump($ioc->get("redis")); var_dump($ioc->get("redis")); var_dump($ioc->get("redis")); var_dump($ioc->get("redis"));
这就是简单容器 其实就是把已经实例化好的对象绑定到某个对象的数组属性里面,要用的时候拿,避免重复实例化耗资源,
每次实例化要重新分配内存,建立上下文,如果是db 还得建立tcp握手等,反正就是能复用就复用
看代码不像laravel lumen的容器 下面一片 优化下命名