[PHP] 项目实践中使用的IOC容器思想

1.容器的意思就是一个全局变量,里面存了很多对象,如果要用到某个对象就从里面取,前提就是要先把对象放进去
2.控制反转就是把自己的控制权交给别人
3.这两个结合就是,把自己的控制权交给别人并且创建的对象放进一个全局变量里
4.好处就是可以灵活的修改一个对象的属性,而不需要去修改类本身的代码

项目实践:
1.Application对象的resources属性数组就是那个容器
2.getResource方法就是控制生成对象的方法,生成一个对象的控制权交给了Application
3.这里先简化的规定下,自定义的类必须有createResource静态方法来创建自己这个对象

class Application{
    private $resources= array();
    public function getResource($class,$params) {
        if (!isset($this->resources[$class])) {
            $this->resources[$class] = call_user_func_array(array($class, ‘createResource‘), $params);
        }
        return $this->resources[$class];
    }
}

class User {
    private $name;
    private $age;
    public function __construct($name,$age){
        $this->name=$name;
        $this->age=$age;
    }
    public static function createResource($name,$age) {
        return new self($name,$age);
    }
    public function says(){
        echo $this->name;
    }
}
$app=new Application();
$user=$app->getResource("User",array("taoshihan","1000"));
$user->says();

原文地址:https://www.cnblogs.com/taoshihan/p/11423263.html

时间: 2024-11-06 15:39:34

[PHP] 项目实践中使用的IOC容器思想的相关文章

项目实践中Linux集群的总结和思考

前言:作为一名Linux/unix系统工程师.项目实施工程师,这几年一直在涉及到对外项目,经手过许多小中型网站的架构,F5.LVS及Nginx接触的都比较多,我想一种比较通俗易懂的语气跟大家说明下何谓负载均衡,何谓Linux集群,帮助大家走出这个误区,真正意义上来理解它们,具体项目施工案例请参考我在network.51cto.com上的同类文章.一.目前网站架构一般分成负载均衡层.web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为现在随着网站的PV越来越多,文件服务器的压力也越来越

项目实践中--Git服务器的搭建与使用指南(转)

一.前言 Git是一款免费.开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.在平时的项目开发中,我们会使用到Git来进行版本控制. Git的功能特性: 从一般开发者的角度来看,git有以下功能: 1.从服务器上克隆数据库(包括代码和版本信息)到单机上. 2.在自己的机器上创建分支,修改代码. 3.在单机上自己创建的分支上提交代码. 4.在单机上合并分支. 5.新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并. 6.生成补丁(patch),把补

项目实践中--Git服务器的搭建与使用指南

一.前言 Git是一款免费.开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.在平时的项目开发中,我们会使用到Git来进行版本控制. Git的功能特性: 从一般开发者的角度来看,git有以下功能: 1.从服务器上克隆数据库(包括代码和版本信息)到单机上. 2.在自己的机器上创建分支,修改代码. 3.在单机上自己创建的分支上提交代码. 4.在单机上合并分支. 5.新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并. 6.生成补丁(patch),把补

Parquet性能测试之项目实践中应用测试

因为从事大数据方面的工作,经常在操作过程中数据存储占空间过大,读取速率过慢等问题,我开始对parquet格式存储进行了研究,下面是自己的一些见解(使用的表都是项目中的,大家理解为宽表即可): 一.SparkSql中两种格式存储的读写性能(以资源产品拓扑信息宽表为例)1.假设:由于对于parquet存储格式来说,针对列式的查询读取操作以及列式的计算性能更高于普通的存储格式,所以在读取相同的sql过程中,表的存储格式为parquet,读取的性能更高,所花费的时间更少.2.测试步骤:①将sparksq

一次项目实践中DBCP数据库连接池性能优化

关于数据库连接池DBCP的关注源于刚刚结束的一轮测试,测试内容是衡量某Webserver服务创建用户接口的性能.这是一款典型的tomcat应用,使用的测试工具是Grinder.DBCP作为tomcat服务器常用的数据库连接池,其性能表现直接关乎应用的性能. 1.遇到的问题 当并发量增加到100时,该接口出现瓶颈,此时TPS接近400,如下图.但是服务端CPU和内存等资源并未达到瓶颈,服务器CPU使用率仅为30%,内存使用率为40%.监控到的javaMethod慢方法为incrAppAccount

[Java 泥水匠] Java Components 之二:算法篇之项目实践中的位运算符(有你不懂的

作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583]http://qm.qq.com/cgi-bin/qm/qr?k=FhFAoaWwjP29_AonqzL0rpdQAjjqlHQQ 如果我的帮到了你,是否乐意捐助一下或请一杯啤酒也好呢?有你支持,干的更好~ 点这参与众筹 我的支付宝:13958686678 2.1 前言 自从上篇[Java 泥水

项目实践中的机器学习

这里介绍机器学习的六大步骤 一.定义问题 二.理解数据 三.数据准备 四.评估算法 五.优化模型 六.结果部署 (当然,这六个步骤并非机械的使用,有时候各个步骤还可能进一步细分,还有可能几个步骤合并成一个步骤.这里以常用的python模板为例) 详细说明 一.定义问题 需要导入常用的类库和数据集,包括导入python 的类库.类和方法,以及数据.可以将数据进行瘦身,快速进行可视化数据集建立. 二.理解数据 描述性统计来分析数据,可视化观察数据.***这一步需要花费时间多问几个问题,设定假设条件并

关于字符串判断的几个常用属性 以及简单项目实现中数组运用的初步思想 蓝懿教育

Label.numberOfLines 可以控制其内的行数 若=0 只要空间够 可以无数行 若=1 1行 : 若=2 2行:类推 UIbutton 通过代码设置字 和 图片 UIbutton *l1=[UIbuttom alloc]initwithframe:CGrectmake…. [l1 settitle:@“111” for state:UIControlStateNormal];   按键上会显示111 [l1 setimage:[UIimage imagenamed:@“…”] for

Spring框架—— IOC容器和Bean的配置

 1 IOC和DI ①IOC(Inversion of Control):反转控制. 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率. 反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向--改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效