1. Go to this page and download the library: Download swiftx/ioc library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
swiftx / ioc example snippets
use Swiftx\Ioc\Component\Container;
$ioc = new Container();
class Demo{ }
// 创建容器
$ioc = new Container();
// 绑定服务提供者
$ioc->bindEntity('Demo',new Demo());
// 获取服务提供者
$ioc->fetch('Demo');
class Demo{ }
$server = new Demo();
$ioc->bindEntity('Demo', $server);
$server == $ioc->fetch('Demo'); // true
class Demo{ }
$factory = function(){
return new Demo();
};
$ioc->bindFactory('Demo', $factory);
$factory() == $ioc->fetch('Demo'); // true
namespace App;
$ioc = new Container();
new Demo() == $ioc->fetch(IDemo::class); // true
class Demo{ }
class Demo2{ }
$ioc->bindFactory(Demo::class, new Demo());
$ioc->exists(Demo::class); // true
$ioc->exists(Demo2::class); // true
$ioc->exists('Demo3'); // false
$demo = $ioc->fetch('Demo');
class Demo1{
public function test1(){
return 1;
}
}
class Demo2{
public function test2(){
$obj = new Demo1();
return $obj->test1();
}
}
$demo = new Demo2();
$demo->test2();
interface IDemo1 {
public function test1();
}
class Demo1 implements IDemo1{
public function test1(){
return 1;
}
}
class Demo2{
protected $demo1;
public function setDemo1(IDemo1 $obj){
$this->demo1 = $obj;
}
public function test2(){
return $this->demo1->test1();
}
}
// 创建对象
$demo = new Demo2();
// 创建依赖
$demo1 = new Demo1();
// 组装对象
$demo->setDemo1($demo1);
$demo->test2();
interface IDemo1 {
public function test1();
}
interface IDemo2 {
public function test2();
}
interface IDemo3 {
public function test3();
}
class Demo1 implements IDemo1{
public function test1(){
return 1;
}
}
class Demo2 implements Demo2{
protected $demo1;
public function setDemo1(IDemo1 $obj){
$this->demo1 = $obj;
}
public function test2(){
return $this->demo1->test1();
}
}
class Demo3 implements Demo3{
protected $demo2;
public function setDemo2(IDemo2 $obj){
$this->demo2 = $obj;
}
public function test3(){
return $this->demo2->test2();
}
}
// 创建容器
$ioc = new Container();
// 注册Demo1为服务提供者
$ioc->bindFactory(IDemo1::class, function(){
return new Demo1();
});
// 注册Demo2为服务提供者
$ioc->bindFactory(IDemo2::class, function() use ($ioc){
$demo = new Demo2();
$demo->setDemo1($ioc->fetch(IDemo1::class));
return $demo;
});
// 注册Demo3为服务提供者
$ioc->bindFactory(IDemo2::class, function() use ($ioc){
$demo = new Demo3();
$demo->setDemo2($ioc->fetch(IDemo2::class));
return $demo;
});
// 调用服务
$demo = $ioc->fetch(IDemo3::class)
$demo->test3();
namespace App;
/**
* IDemo1.php文件
* @default-implement App\Demo1 singleton=true
*/
interface IDemo1 {
public function test1();
}
namespace App;
/**
* Demo1.php文件
*/
class Demo1 implements IDemo1{
public function test1(){
return 1;
}
}