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的容器 下面一片 优化下命名
lumen-ioc容器测试 (1)的更多相关文章
- 自定义模拟一个Spring IOC容器
一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...
- Aoite 系列(02) - 超动感的 Ioc 容器
Aoite 系列(02) - 超动感的 Ioc 容器 Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Ioc 是一套解决依赖的最佳实践. 说 ...
- AutoFac使用~IOC容器(DIP,IOC,DI)
#cnblogs_post_body h1 { background-color: #A5A5A5; color: white; padding: 5px } Autofac一款IOC容器,据说比Sp ...
- IOC容器特性注入第一篇:程序集反射查找
学习kooboo的框架发现它的注入容器方法比较特别,同样是利用MVC的注入点,但它是查找网站下面bin所有的DLL利用反射查找特性找到对应的服务注入到容器. 这样的好处很简单:完全可以不用关心IOC容 ...
- 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解
1.概述 所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模 ...
- IOC容器中bean的生命周期
一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- TypeC一个微软开发的超简单.NET依赖注入/IoC容器
控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...
- IoC 之 2.2 IoC 容器基本原理(贰)
2.2.1 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IoC ...
随机推荐
- Python 字符串去除相邻重复的元素
1 def quchong(S): 2 str1=[""] 3 for i in S: 4 if i == str1[-1]: 5 str1.pop() 6 else: 7 str ...
- Node.js向MongoDB中插入并查询数据
首先必须要保持Node.js与MongoDB保持连接 具体教程见:Node.js连接MongoDB数据库步骤 插入数据步骤如下 node项目文件如下:在routes文件夹下新建insert.js文件, ...
- linux下限定连接ip和端口
1.限制端口 vim /etc/ssh/sshd_config 修改连接端口 修改之后重启sshd服务 service sshd restart 再次连接时就需要使用修改后的端口去连接了 备注:判断修 ...
- loadrunner跑场景时报错Full MDB file. New error messages will be ignored
这个原因是在controller跑场景时,controller的日志文件占用内存太大 解决办法:先找到controller的日志文件Results——Results Setting——找到日志的路径, ...
- python 3 for嵌套
- [LeetCode]Sql系列2
题目 1205. 每月交易II Transactions 记录表 +----------------+---------+ | Column Name | Type | +-------------- ...
- FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 云计算openstack共享组件——消息队列rabbitmq(3)
一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...
- MATLAB 与 Excel 接口
MATLAB 与 Excel 接口MATLAB 与 Excel 有两种接口方式:一种是通过 MATLAB 提供的 Excel 生成器,生成220 MATLAB 实用教程DLL 组件和 VBA 代码,实 ...
- CSAPP 第一章 计算机系统漫游
第一章 计算机系统漫游 C语言的起源:(系统级编程的首选) C语言与Unix操作系统关系密切 C语言小而简单:其设计由一个人掌控 C语言是为实践目的设计的:其设计用来实现Unix操作系统 C语言程序编 ...