Supposons que j'ai la structure de classe suivante :
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);
Ce code fonctionne bien. Dans ce cas, le nom du canal est le nom de la classe. Cependant, je souhaite utiliser PHP DI (https://php-di.org/doc/php-definitions.html#autowired-objects) pour résoudre ce problème. Le problème est qu'il ne peut pas résoudre la situation car il ne connaît pas le nom de classe transmis au logger.
Exemple de définition PhpDI
return [ "SomeLoggerInterface" => autowire(Logger::class)->constructorParameter("channel", // 在这里获取类的名称。在这种情况下,它将是 "UsingLogger") ]
J'espère que cela sera clair. Si plus de contexte est nécessaire, veuillez me le faire savoir.
J'ai décrit mes étapes
Je suppose que le package DI est déjà installé.
L'exécution de ce script produit le résultat suivant :
Peut-être devriez-vous également utiliser des interfaces. J'espère que cela vous aide.