Andaikan saya mempunyai struktur kelas berikut:
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);
Kod ini berfungsi dengan baik. Dalam kes ini, nama saluran ialah nama kelas. Walau bagaimanapun, saya mahu menggunakan PHP DI (https://php-di.org/doc/php-definitions.html#autowired-objects) untuk menyelesaikan masalah ini. Masalahnya ialah ia tidak dapat menyelesaikan keadaan kerana ia tidak mengetahui nama kelas yang diserahkan kepada pembalak.
Contoh definisi PhpDI
return [ "SomeLoggerInterface" => autowire(Logger::class)->constructorParameter("channel", // 在这里获取类的名称。在这种情况下,它将是 "UsingLogger") ]
Semoga ini menjelaskannya. Jika lebih banyak konteks diperlukan, sila beritahu saya.
Saya telah menggariskan langkah saya
Saya andaikan anda sudah memasang pakej DI.
Menjalankan skrip ini menghasilkan output berikut:
Mungkin anda juga perlu menggunakan antara muka. Harap ini membantu anda.