lumen-ioc容器测试 (1)

lumen-ioc容器测试 (2)

lumen-ioc容器测试 (3)

lumen-ioc容器测试 (4)

lumen-ioc容器测试 (5)

lumen-ioc容器测试 (6)

如果第一次看Laravel 、Lumen的容器源码可能会被里面的变量名搞的比较迷糊、毕竟很多人英文底子不是很好。
为了解决这个问题咱们简单装饰一下刚才的简单容器、可以初步了解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)的更多相关文章

  1. lumen-ioc容器测试 (1)

    lumen-ioc容器测试 (1) lumen-ioc容器测试 (2) lumen-ioc容器测试 (3) lumen-ioc容器测试 (4) lumen-ioc容器测试 (5) lumen-ioc容 ...

  2. 自定义模拟一个Spring IOC容器

    一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...

  3. Aoite 系列(02) - 超动感的 Ioc 容器

    Aoite 系列(02) - 超动感的 Ioc 容器 Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Ioc 是一套解决依赖的最佳实践. 说 ...

  4. AutoFac使用~IOC容器(DIP,IOC,DI)

    #cnblogs_post_body h1 { background-color: #A5A5A5; color: white; padding: 5px } Autofac一款IOC容器,据说比Sp ...

  5. IOC容器特性注入第一篇:程序集反射查找

    学习kooboo的框架发现它的注入容器方法比较特别,同样是利用MVC的注入点,但它是查找网站下面bin所有的DLL利用反射查找特性找到对应的服务注入到容器. 这样的好处很简单:完全可以不用关心IOC容 ...

  6. 对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解

    1.概述 所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模 ...

  7. IOC容器中bean的生命周期

    一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...

  8. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

  9. TypeC一个微软开发的超简单.NET依赖注入/IoC容器

    控制反转(IoC,Inversion of Control)是由Martin Fowler总结出来的一种设计模式,用来减少代码间的耦合.一般而言,控制反转分为依赖注入(Dependency Injec ...

  10. IoC 之 2.2 IoC 容器基本原理(贰)

    2.2.1  IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IoC ...

随机推荐

  1. 图解 Await 和 Async

    原文链接:Await and Async Explained with Diagrams and Examples 文章目录 简介 Promise 问题:组合 Promise Async 函数 Awa ...

  2. get、post请求方式区别

    1.get请求只有请求头,没有请求体,它的参数只能写在url里面,post请求数据放在请求体里面 (HTTP协议:两台电脑交互url请求头Request Headers:一些额外的信息,比如用的什么浏 ...

  3. 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 4 - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络)

    Week 4 Quiz - Key concepts on Deep Neural Networks(第四周 测验 – 深层神经网络) \1. What is the "cache" ...

  4. SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...

  5. MySQL安装错误Couldn't find MySQL server

    Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe) 昨天rpm安装MySQL5.7后 ...

  6. k8s service对象

    k8s service对象   概述 service服务也是Kubernetes里核心字眼对象之一,Kubernetes里的每一个service其实就是我们经常提起的微服务架构中的一个微服务,之前讲解 ...

  7. 《Head First 设计模式》:状态模式

    正文 一.定义 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类. 要点: 状态模式允许一个对象基于内部状态而拥有不同的行为. 状态模式将状态封装成为独立的类,并将动作委托到代 ...

  8. selenium过豆瓣滑动验证码

    首先是加速度代码 def get_tracks(distance): """ 拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速 匀变速运动基本公式: ①v = v0+at ...

  9. python爬取千库网

    url:https://i588ku.com/beijing/0-0-default-0-8-0-0-0-0-1/ 有水印 但是点进去就没了 这里先来测试是否有反爬虫 import requests ...

  10. 【论文】The Road to SDN: An Intellectual History of Programmable Networks

    目录 ABSTRACT: 1 Introduction: 2 The Road to SDN: 2.1 Active Networking Technology push and use pull I ...