依赖注入学习-01

<?php

/*
    无Di容器的写法

    class example {
        private $_db;
        function getList(){
            $this->_db->query("......");//这里具体sql语句就省略不写了
        }
        //从外部注入db连接
        function setDb($connection){
            $this->_db = $connection;
        }
    }
    //调用
    $example = new example();
    $example->setDb(Factory::getDb());//注入db连接
    $example->getList();

    class Factory {
        public static function getExample(){
            $example = new example();
            $example->setDb(Factory::getDb());//注入db连接
            $example->setFile(Factory::getFile());//注入文件处理类
            $example->setImage(Factory::getImage());//注入Image处理类
            return $expample;
        }
    }
    实例化example时变为
    $example=Factory::getExample();
    $example->getList();
*/

header("Content-Type:text/html;charset=utf-8");

class Di{
    private $_factory;
    public function set($id,$value){
        $this->_factory[$id] = $value;
    }

    public function get($id){
        $value = $this->_factory[$id];
        return $value();
    }
}

class User{
    private $_username;
    function __construct($username="") {
        $this->_username = $username;
    }
    function getUserName(){
        return $this->_username;//$this->_username = $username;
    }
}

$di = new Di();
$di->set("zhangsan",function(){
    return new User(‘张三‘);
}); //$this->_factory[‘zhangsan‘] = new User(‘张三‘);

$di->set("lisi",function(){
   return new User("李四");
}); //$this->_factory[‘lisi‘] = new User(‘李四‘);

echo $di->get("zhangsan")->getUserName();// $value = $this->_factory[‘zhangsan‘] = new User(‘张三‘)->getUserName();
echo $di->get("lisi")->getUserName();// $value = $this->_factory[‘lisi‘] = new User(‘李四‘)->getUserName();

/* $data = new User(‘张三‘);
echo $data->getUserName(); */

时间: 2024-10-23 14:27:53

依赖注入学习-01的相关文章

Yii2 学习笔记 01 -- 依赖注入在yii2中的应用

什么是依赖注入?                  依赖注入(Dependency Injection)是设计模式的一种.名字比较抽象,但是,要解决的问题却是比较明确.对于给定的应用程序,需要借助一些相对独立的组件来完成功能.一般来说,使用这些组件的过程就包含在应用程序的逻辑语句之中.问题是,当这些组件想要做成类似插件功能,以达到应用程序的业务逻辑不变就能随意的更改组件的实现的效果.这种灵活性取决于应用程序如何组装这些组件.如果说应用程序依赖于这些组件的话,依赖注入就是把这些依赖关系从应用程序的

Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

一.思想理解 Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运行.Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口.当系统需要重构时,代码的改写量将大大减少. 上面所说的一切都得宜于Spring的核心机制,依赖注入.依赖注入让bean与

WebApi学习笔记06:使用webapi模板--仓储模式--Unity依赖注入

1.Web项目 1.1概述 对数据操作封装使用存储模式是很常见的方式,而使用依赖注入来降低耦合度(方便创建对象,可以抛弃经典的工厂模式)…… 1.2创建项目 1.3添加模型 在Models下,添加Product.cs: namespace WebApi06.Models { public class Product { public int ID { get; set; } public string Name { get; set; } public decimal Price { get;

微软企业库5.0学习笔记(10)ASP.NET模块依赖注入

您可以使用HTTP模块,一个到ASP.NET HttpApplicationState类的扩展,在Global.asax编写代码强制ASP.NET在每一个页面请求时自动注入依赖的对象,就像在ASP.NET Web窗体应用程序中讨论的一样. 下列方法显示了一个合适的方法能够获取PreRequestHandlerExecute事件将它自己注入到ASP.NET的执行流水线,在每个页面请求中通过容器的BuildUp方法运行Http模块,并获取OnPageInitComplete事件.当OnPageIni

Spring 3.0 学习-DI 依赖注入_创建Spring 配置-使用一个或多个XML 文件作为配置文件,使用自动注入(byName),在代码中使用注解代替自动注入,使用自动扫描代替xml中bea

文章大纲 在xml中声明bean和注入bean 在xml中声明bean和自动注入bean 自动扫描bean和自动注入bean 对自动扫描bean增加约束条件 首次接触spring请参考 Spring 3.0 学习-环境搭建和三种形式访问 1.典型的Spring XML 配置文件表头 <?xml version="1.0" encoding="UTF-8"?><!-- 一般化的Spring XML 配置 --> <beans xmlns=

spring框架学习(二)依赖注入

转自:http://blog.csdn.net/lishuangzhe7047/article/details/20740835 ———————————————————————————————————————————— spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普通字符类型赋值. [java] view plaincopyprint? pub

AngularJS学习笔记之依赖注入

最近在看AngularJS权威指南,由于各种各样的原因(主要是因为我没有money,好讨厌的有木有......),于是我选择了网上下载电子版的(因为它不要钱,哈哈...),字体也蛮清晰的,总体效果还不错.但是,当我看到左上角的总页码的时候,479页....479....479....俺的小心脏被击穿了二分之一有木有啊,上半身都石化了有木有啊,那种特别想学但是看到页码又不想学的纠结的心情比和女朋友吵架了还复杂有木有啊,我平常看的电子书百位数都不大于3的好伐! 哎,原谅我吧,我应该多看几本新华字典习

Spring学习总结(1.2)-依赖注入及配置了解

前面的博客大概的讲了一下IOC容器的理解,那么IOC的实现实际上依托于依赖注入的.简单的说就是IOC是一种思想,而依赖注入为这种思想提供了实现.个人是这么理解的.本篇博客介绍两种常用的注入方式,以及他们的配置(基于XML). IOC容器说明 从最近的学习来看,特别是基于XML的配置形式下.IOC容器就是一个生产线,它依据配置中类之间的持有关系,一个部件一个部件的组装成一个完整的产品去执行一个完整的任务.从使用者的方向上看,他只能看到一个入口,而之后的处理他是不知道的.当然,这在没有容器的概念的时

spring学习(二)---依赖注入

spring第二个特性是依赖注入. 学习依赖注入,首先应该明白两个问题:1,谁依赖谁:2,谁注入,注入什么? 首先还是看代码: 还是这个bean: package testSpring.business.bean; import org.springframework.stereotype.Repository; import testSpring.business.iface.IPrint; /** * UserBean : * @author xuejupo [email protected