lumen-ioc容器测试 (2)
为了解决这个问题咱们简单装饰一下刚才的简单容器、可以初步了解lumen的容器中几个属性名的含义。
<?php class Container
{
// 调用bind方法绑定过的对象
private $bindings = []; // 执行了bind并且执行了回调 存储的是实例化过的对象 可以直接使用
private $instance = []; /**
* 绑定
* @param $abstract bind的名称
* @param $concrete 回调
*/
public function bind($abstract, $concrete)
{
$this->bindings[$abstract] = $concrete;
} /**
* 根据绑定名称 获取实例
* @param $abstract 名称
*/
public function make($abstract)
{
if(!isset($this->bindings[$abstract])){
throw new \Exception($abstract." 未绑定到容器");
} // 如果该对象不在数组 那么实例化他
if(empty($this->instance[$abstract])){
$this->instance[$abstract] = $this->bindings[$abstract]();
}
return $this->instance[$abstract];
}
} $container = new Container();
$container->bind('redis',function(){
$redis = new Redis();
$redis->connect("127.0.0.1",6379);
return $redis;
}); $container->bind('mysql',function(){
$pdo = new PDO("mysql:host=127.0.0.1;", "root", "root");
return $pdo;
}); echo "<pre>";
var_dump($container->make("redis"));
var_dump($container->make("redis"));
var_dump($container->make("redis"));
var_dump($container->make("mysql"));
var_dump($container->make("mysql"));
var_dump($container->make("mysql"));
var_dump($container->make("mysql")); $redis = $container->make("redis");
echo $redis->get("name");
结果
object(Redis)#4 (0) {
}
object(Redis)#4 (0) {
}
object(Redis)#4 (0) {
}
object(PDO)#5 (0) {
}
object(PDO)#5 (0) {
}
object(PDO)#5 (0) {
}
object(PDO)#5 (0) {
}
six
说明每次执行的都是取自容器里面的对象
是不是满满的逼格?
任何项目或者事情都是先做出来一个小雏形,在其基础上针对已有的问题做优化、升级;
那么我们现在就开始找问题,并且升级吧。带你一步步实现lumen容器。
lumen-ioc容器测试 (2)的更多相关文章
- lumen-ioc容器测试 (1)
lumen-ioc容器测试 (1) lumen-ioc容器测试 (2) lumen-ioc容器测试 (3) lumen-ioc容器测试 (4) lumen-ioc容器测试 (5) lumen-ioc容 ...
- 自定义模拟一个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 ...
随机推荐
- Apache报错:无法使用可靠的服务器域名
Apache 安装和启动时报错:无法使用可靠的服务器域名,打开Apache配置文件httpd.conf,去除 ServerName 前面的注释即可 1. 报错信息:无法使用可靠的服务器域名 AH005 ...
- python根据密钥得到谷歌两步验证动态验证码
# coding=utf-8 import time import base64 import sys import hashlib import hmac import struct def goo ...
- VS调试出现解决 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题
- bernoulli, multinoulli distributions 讲解
bernoulli, multinoulli distributions 讲解 常用概率分布-Bernoulli 分布 & Multinoulli 分布 转自:迭代自己-19常用概率分布 ...
- Linux常用的三种软件安装方式
一:Linux源码安装 1.解压源码包文件 源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,分别的解压方式: ...
- Java面试必问之-JUC
JUC:java.util.concurrent (Java并发编程工具类) 代码:D:\JAVA\Java_Learning\Elipse_Project\workspace200301EE\JUC ...
- SpringBoot中使用切面的每次传的参数,进行解析,验签,并返回解码后的参数
目的,在每次请求的时候,对每次传的参数,进行解析,验签,并返回解码后的参数, 以json传递: 例子背景: IOT平台提供对外可访问的接口, 需要对所有参数的传递做到 不泄露.认证的目的:所以需要在每 ...
- Redis哨兵模式(sentinel)部署
1 主机环境 我这里使用的操作系统是centos 6.5,安装在vmware上,共三台. 主机名 IP 操作系统 用户名 安装目录 node1 192.168.1.101 centos 6.5 wxy ...
- vue项目初始化自定义webpack与eslint
文章目录 问题 简化步骤 问题 // main.js import Antd from "ant-design-vue"; import "ant-design-vue/ ...
- python-字符串,字典,列表
0x01 字符串 python单双引号都可以 str = "hello world" str_test = "yicunyiye" print(str,str_ ...