Angenommen, ich habe die folgende Klassenstruktur:
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);
Dieser Code funktioniert einwandfrei. In diesem Fall ist der Name des Kanals der Name der Klasse. Ich möchte jedoch PHP DI (https://php-di.org/doc/php-definitions.html#autowired-objects) verwenden, um dieses Problem zu lösen. Das Problem besteht darin, dass die Situation nicht gelöst werden kann, da der an den Logger übergebene Klassenname nicht bekannt ist.
Beispiel PHPDI-Definition
return [ "SomeLoggerInterface" => autowire(Logger::class)->constructorParameter("channel", // 在这里获取类的名称。在这种情况下,它将是 "UsingLogger") ]
Ich hoffe, das macht es klar. Wenn mehr Kontext benötigt wird, lassen Sie es mich bitte wissen.
Ich habe meine Schritte beschrieben
我假设你已经安装了DI包。
运行这个脚本会产生以下输出:
也许你还应该使用接口。希望这对你有帮助。