最近跑去看 PHP-DI
簡單實作小記
簡單講解
在使用 Spring boot 和 Laravel 上,常常看到自動注入的範例
很多文章沒有深入講解為什麼可以做自動注入
這段時間我使用到 Spring boot 的 @autowired
做自動注入
明白在框架中有有一個機制在控制你裡面放的需要 new
出來的物件
在使用上可以說
最近再回頭看 php-di 就突然了解了
更多講解可以看Laravel 實作小記 | 程式狂想筆記
之前有記錄幾個網站有詳細談到
自動注入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?php
include './vendor/autoload.php';
# 第 1 步: 建立 DI container
$builder = new \DI\ContainerBuilder();
$container = $builder->build();
# 第 2 步: 建立 class
$a = $container->get('A');
var_dump($a);
# 第 3 步: 建立 DI 實作 class,B class 不需要做 new 動作
class A{
private $_b;
function __construct(B $b)
{
$this->_b = $b;
// $b->hello();
}
}
class B{
function __construct()
{
echo "Hello World! B";
}
function hello()
{
echo "B:say hello";
}
}
|
autowiring 出來都是單例模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<?php
include './vendor/autoload.php';
$builder = new \DI\ContainerBuilder();
$container = $builder->build();
$a = $container->get('A');
$a_b = $a->get_B();
$b = $container->get('B');
var_dump($a_b === $b); # true
class A{
private $_b;
function __construct(B $b)
{
$this->_b = $b;
// $b->hello();
}
function get_B()
{
return $this->_b;
}
}
class B{
function __construct()
{
echo "Hello World! B";
}
function hello()
{
echo "B:say hello";
}
}
|
BTW: Spring IOC 单例和多例 - 简书
hailindai/SSMSample