控制反轉(Inversion of Control,縮寫IoC)是一種的物件設計模式,它把物件的建立和使用分開,透過容器來管理物件之間的依賴關係。在PHP中可以使用現成的容器類庫或手動編寫容器來實現IoC。以下是一個使用手動編寫容器的例子:
// 定義某個類,它需要依賴於其他類
class SomeClass {
public function __construct(SomeDependency $dep) {
$this->dep = $dep;
}
public function doSomething() {
echo $this->dep->getValue();
}
}
// 定義另外一個類,它是SomeClass的依賴
class SomeDependency {
public function getValue() {
return "Hello, I am dependency!";
}
}
// 手動編寫容器,並將SomeDependency類的例項註冊到容器中
$container = [];
$container['SomeDependency'] = function(){
return new SomeDependency();
};
// 從容器中獲取SomeClass的例項並使用
$container['SomeClass'] = function($container){
return new SomeClass($container['SomeDependency']());
};
$someClass = $container['SomeClass']($container);
// 輸出: Hello, I am dependency!
$someClass->doSomething();
在這個例子中,SomeClass
類需要依賴於 SomeDependency
類,因此在其建構函式中接受了一個 SomeDependency
類的例項,並呼叫其 getValue()
方法。
接下來我們手動編寫了一個容器 $container
,並將 SomeDependency
類作為其中的一個服務進行註冊。在註冊 SomeClass
類時,我們利用了 PHP 的閉包函式來將 SomeDependency
類的例項注入 SomeClass
類建構函式中,實現了控制反轉。
最後,我們可以透過從容器中獲取 SomeClass
類的例項並呼叫其 doSomething()
方法,來使用我們手動編寫的IoC容器。
本作品採用《CC 協議》,轉載必須註明作者和本文連結