Bagaimana untuk mendapatkan nama kelas pembina bagi objek yang diluluskan dalam PHP?
P粉413307845
P粉413307845 2023-09-11 11:23:19
0
1
537

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

P粉413307845
P粉413307845

membalas semua (1)
P粉697408921

Saya andaikan anda sudah memasang pakej DI.

 'UsingLogger', 'Logger' => DI\create()->constructor(DI\get('channel')), 'UsingLogger' => DI\create()->constructor(DI\get('Logger')), ]); final class TestClass { public function __construct(UsingLogger $usingLogger) { var_dump($usingLogger); } } new TestClass($container->get('UsingLogger'));

Menjalankan skrip ini menghasilkan output berikut:

php index.php path/to/script.php:25: class UsingLogger#20 (1) { private readonly Logger $logger => class Logger#25 (1) { private readonly string $channel => string(11) "UsingLogger" } }

Mungkin anda juga perlu menggunakan antara muka. Harap ini membantu anda.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!