php 简单说明IoC (php 实例+注释)

简单说明IoC

<?php

//Ioc ————  设计方式
//控制反转 Inversion of Control
//依赖关系的转移
//依赖抽象而非实践

//用于解决高层应用依赖 底层组件,软件移植性差(修改困难)的问题
//实例:
/*
class soft{
    private $writer;

    public function __construct(){
        $this->writer = new FloppyWriter;
    }
    public function save(){
        $this->writer->SaveToFloppy();
    }
}
//造成高层对底层的依赖__使程序无法重用 不好的设计
class FloppyWriter{
    public function saveToFloppy(){
        echo __METHOD__;
    }
}

$soft = new soft;
$soft->save()
*/
##########################改进##########################
//定义一个接口约定
interface IDeviceWriter
{
    public function saveToDevice();
}
class soft{
    private $_writer;

    public function setWriter($name){
        $this->_writer = $name;
    }
    public function save(){
        $this->_writer->saveToDevice();
    }
}
//软盘储存
class FoppyWriter implements IDeviceWriter{
    public function saveToDevice(){
        echo __METHOD__;
    }
}
//USB储存
class USBWriter implements IDeviceWriter{
    public function saveToDevice(){
        echo __METHOD__;
    }
}
//将高层依赖 转移到 "依赖注入"
$soft= new soft();
$writer=  new USBWriter;
$soft->setWriter($writer);
$soft->save();
时间: 2024-11-08 03:43:49

php 简单说明IoC (php 实例+注释)的相关文章

几句代码简单实现IoC容器

前言 最近在调试EasyNetQ代码的时候发现里面有一段代码,就是IoC容器的简单实现,跟着他的代码敲了一遍,发现了奇妙之处.当然也是因为我才疏学浅导致孤陋寡闻了.他的思路就是通过动态调用构造函数生成对象,然后将对象保存,调用的时候进行单例调用,而且,代码中不会存在 new 字眼.所有实例对象的创建和映射都在容器中实现.当然,还是用第三方的容器比较稳妥,本文中只是很简单的一个示范.具体理解的是否正确,我也不敢说,只不过,能达到一些预期的效果,功能不够强大. 解析 首先,我们先添加几个接口.ISe

白话系列之IOC,三个类实现简单的Ioc

前言:博客园上已经有很多IOC的博客.而且很多写的很好,达到开源的水平,但是对于很多新人来说,只了解ioc的概念,以及怎么去使用ioc.然后想更进一步去看源码,但是大部分源码都比较困难,当不知道一个框架整体时候,从每一个片段去推理,其实很耗费时间,所以这篇博客,从autofac及.netcore自带的ioc的源码中抽象出最核心代码,先了解整个ioc的实现方式,其他的所有好的ioc,只是在这个框架上面进行缝缝补补. 友情提示下,这个ioc虽然能够使用,但是只是为了做例子,所以只保留最核心代码,要使

JSP简单练习-数组应用实例

<%@ page contentType="text/html; charset=gb2312" %> <html> <body> <% int i,j,k; // 声明一个5行6列的二维数组 int intArray[][]=new int[5][6]; k=0; // 数组赋初始值 for(i=0;i<5;i++) { for(j=0;j<6;j++) { intArray[i][j]=k; k++; } } // 输出数组中的

简单的Ajax应用实例

从网页前端输入提示范围内的字符,然后显示从后台返回的结果 <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script type="text/javascript"> function showHint(str) { var xmlhttp; if (str.length==0) {

C#简单注册表操作实例

1.简介操作 //设置注册值 private void Button_Click(object sender, RoutedEventArgs e) { //路径及间隔符号要正确 //1.如果指定路径不存在,则创建 //2.如果指定键存在,则覆盖值 string path = "HKEY_CURRENT_USER\\myRegOne"; Registry.SetValue(path, "Expend", "hellow world!"); Mes

Java多线程之简单的线程同步实例

数据类: package Thread.MyCommon; public class Data { public int num = 0; public synchronized int getEven() { ++num; Thread.yield();//让另外线程先执行,加大测试效果几率 ++num; return num; } } 线程类: package Thread.MyCommon; public class myThread implements Runnable { priva

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

比Spring简单的IoC容器

比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring的内部运行机制,阅读它的代码非常重要, 但是往往它的代码非常的"多". 现在根据Spring对Bean的生命周期的处理, 编写出一款非常小的IoC容器, 没有了对XML的解析,而是通过对Config对象的构造而完成IoC配置文件的声明, 相比较XML的方式, 对重构软件非常具有好处, 并且

简单理解IoC与DI

为了理解Spring的IoC与DI从网上查了很多资料,作为初学者,下面的描述应该是最详细,最易理解的方式了. 首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好.qq号.电话号.ip号.iq号………,想办法认识她们,