PHPStorm und PSR-11 Container | 10.01.2021
<p>Das Ziel von PSR-11 besteht darin, zu standardisieren, wie Frameworks und Bibliotheken einen Container verwenden, um (gemeinsame) Objekte und Parameter abzurufen. Egal, ob nun PHP-DI oder eine andere PSR-11-kompatible Bibliothek genutzt wird: Es macht Spaß und hilft, besseren Code zu schreiben.</p> <p>Wer, wie ich, PHPStorm nutzt, wird sicherlich irgendwann mal den Wunsch gehabt haben, auch bei Containern die Autovervollständigung zu nutzen. Das ist relativ einfach über die Attributierung im Quellcode mithilfe von PHPDoc zu realisieren. Dazu wird bei der Deklaration der Variable einfach das @var-Attribut auf die Klasse gesetzt:</p> <pre><?php // File1.php<br>/** @var Psr\Log\LoggerInterface LoggerInterface **/ $loggerInterface = $container->get(\Logger::class);</pre> <p>Nun hatte ich jedoch den Fall, dass ich in einem anderen Datei-Scope (also innerhalb von PHPStorm in einem zweiten Dokument, welches nicht direkt, sondern nur über Composer in den PHP-Code-Scope eingebunden wird) zu arbeiten hatte. Ich hatte also die Dateien File1.php und File2.php. Und die IDE konnte nicht erkennen, dass File2.php auf das Objekt aus File1.php zurückgriff.</p> <p>
override(\Psr\Container\ContainerInterface::get(),
map([
'\Logger' =&gt; \Psr\Log\LoggerInterface::class
])
);
}</pre> <p>Am Ende des Tages funktioniert es genau so, wie es soll. Auch wenn es eigentlich zwei verschiedene Dinge sind, die hier zum Funktionieren vermischt werden. Aber es funktioniert. Der Vorteil besteht nun darin, dass an einer zentralen Stelle die notwendige Konfiguration vorgenommen werden kann und im eigentlichen Code auf die Methoden und Attribute des Containers zurückgegriffen werden kann.</p>