手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP依赖倒置(Dependency Injection)代码实例
PHP依赖倒置(Dependency Injection)代码实例
摘要:实现类:复制代码代码如下:setings[$abstract]=$concrete;}publicfunctionget($abstract...

实现类:

复制代码 代码如下:

<?php

class Container

{

protected $setings = array();

public function set($abstract, $concrete = null)

{

if ($concrete === null) {

$concrete = $abstract;

}

$this->setings[$abstract] = $concrete;

}

public function get($abstract, $parameters = array())

{

if (!isset($this->setings[$abstract])) {

return null;

}

return $this->build($this->setings[$abstract], $parameters);

}

public function build($concrete, $parameters)

{

if ($concrete instanceof Closure) {

return $concrete($this, $parameters);

}

$reflector = new ReflectionClass($concrete);

if (!$reflector->isInstantiable()) {

throw new Exception("Class {$concrete} is not instantiable");

}

$constructor = $reflector->getConstructor();

if (is_null($constructor)) {

return $reflector->newInstance();

}

$parameters = $constructor->getParameters();

$dependencies = $this->getDependencies($parameters);

return $reflector->newInstanceArgs($dependencies);

}

public function getDependencies($parameters)

{

$dependencies = array();

foreach ($parameters as $parameter) {

$dependency = $parameter->getClass();

if ($dependency === null) {

if ($parameter->isDefaultValueAvailable()) {

$dependencies[] = $parameter->getDefaultValue();

} else {

throw new Exception("Can not be resolve class dependency {$parameter->name}");

}

} else {

$dependencies[] = $this->get($dependency->name);

}

}

return $dependencies;

}

}

实现实例:

复制代码 代码如下:

<?php

require 'container.php';

interface MyInterface{}

class Foo implements MyInterface{}

class Bar implements MyInterface{}

class Baz

{

public function __construct(MyInterface $foo)

{

$this->foo = $foo;

}

}

$container = new Container();

$container->set('Baz', 'Baz');

$container->set('MyInterface', 'Foo');

$baz = $container->get('Baz');

print_r($baz);

$container->set('MyInterface', 'Bar');

$baz = $container->get('Baz');

print_r($baz);

【PHP依赖倒置(Dependency Injection)代码实例】相关文章:

PHP中的traits实现代码复用使用实例

PHP文件读取功能的应用实例

PHP中的魔术方法总结和使用实例

php中get_defined_constants函数用法实例分析

一个php作的文本留言本的例子(四)

PHP_Flame(Version:Progress)的原代码

VFP与其他应用程序的集成

PHP嵌套输出缓冲代码实例

用PHP函数解决SQL injection

PHP数组和explode函数示例总结

精品推荐
分类导航