假設我有以下的類別結構:
class Logger { public function __construct(string $channel) { // Logger初始化工作 } } class UsingLogger { private Logger $logger; public function __construct(Logger $logger) { $this->logger = $logger; } } $logger = new Logger("UsingLogger"); $usingLogger = new UsingLogger($logger);
這個程式碼可以正常運作。在這種情況下,通道的名稱就是類別的名稱。然而,我想使用PHP DI(https://php-di.org/doc/php-definitions.html#autowired-objects)來解決這個問題。問題是它無法解決這種情況,因為它不知道傳遞給日誌記錄器的類別名稱。
範例PhpDI定義
return [ "SomeLoggerInterface" => autowire(Logger::class)->constructorParameter("channel", // 在这里获取类的名称。在这种情况下,它将是 "UsingLogger") ]
希望這樣說得清楚。如果需要更多上下文,請告訴我。
我已經概述了我的步驟
我假設你已經安裝了DI套件。
執行這個腳本會產生以下輸出:
也許你也應該使用介面。希望這對你有幫助。