最近跑去看 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';
$builder = new \DI\ContainerBuilder(); $container = $builder->build();
$a = $container->get('A');
var_dump($a);
class A{ private $_b; function __construct(B $b) { $this->_b = $b; } }
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);
class A{ private $_b; function __construct(B $b) { $this->_b = $b; }
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