<?php class A { private $_b; public function __construct($b) { $this->_b = $b; } public function sayHello() { $this->_b->sayHello(); echo 'I am A<br>'; } } class B { private $_c; public function __construct($c) { $this->_c = $c; } public function sayHello() { $this->_c->sayHello(); echo 'I am B<br>'; } } class C { public function sayHello() { echo 'I am C<br>'; } } // 依赖注入容器 class DIContainer { private $_container; public function __set($key, $val) { $this->_container[$key] = $val; } public function __get($key) { return $this->_container[$key]($this); } } $container = new DIContainer(); $container->c = function(){ return new C; }; $container->b = function($container){ return new B($container->c); }; $container->a = function($container){ return new A($container->b); }; $container->a->sayHello();
输出结果:
I am C I am B I am A