bg_image
header

PSR-11

PSR-11 ist eine PHP-Standard-Empfehlung (PHP Standard Recommendation), die sich mit der Container-Interface-Definition beschäftigt. Sie beschreibt ein einheitliches Interface für Dependency Injection Container, das in PHP-Projekten verwendet werden kann. Dependency Injection Container sind Werkzeuge, die Klassen und ihre Abhängigkeiten verwalten und auflösen.

Ziel von PSR-11

PSR-11 wurde eingeführt, um sicherzustellen, dass verschiedene Frameworks, Bibliotheken und Tools interoperabel mit Dependency Injection Containern arbeiten können. Durch die Einhaltung dieses Standards wird es möglich, verschiedene Container in einem Projekt zu verwenden, ohne den Code ändern zu müssen.

Kernkomponenten des PSR-11

PSR-11 definiert zwei Interfaces:

  1. ContainerInterface

    • Das zentrale Interface, das Methoden bereitstellt, um Abhängigkeiten aus dem Container zu holen.
namespace Psr\Container;

interface ContainerInterface {
    public function get(string $id);
    public function has(string $id): bool;
}
    • get(string $id): Gibt die Instanz (oder den Service) zurück, die im Container unter einer bestimmten ID registriert ist.
    • has(string $id): Prüft, ob der Container eine Instanz mit der angegebenen ID enthält.
  • 2. NotFoundExceptionInterface

    • Wird ausgelöst, wenn ein Service nicht im Container gefunden wird.
namespace Psr\Container;

interface NotFoundExceptionInterface extends ContainerExceptionInterface {
}

3. ContainerExceptionInterface

    • Wird für generelle Fehler im Container verwendet.

Vorteile von PSR-11

  • Interoperabilität: Verschiedene Frameworks und Bibliotheken können denselben Container nutzen.
  • Standardisierung: Einheitliche API für Containerzugriffe.
  • Erweiterbarkeit: Entwickler können eigene Container erstellen, die den PSR-11-Spezifikationen entsprechen.

Typischer Anwendungsfall

PSR-11 wird häufig in Frameworks wie Symfony, Laravel, oder Zend Framework (jetzt Laminas) verwendet, die Dependency Injection Container bereitstellen. Auch Tools wie PHP-DI oder Pimple unterstützen PSR-11.

Beispiel

Ein einfaches Beispiel für den Einsatz von PSR-11:

use Psr\Container\ContainerInterface;

class MyService {
    public function __construct(private string $message) {}
    public function greet(): string {
        return $this->message;
    }
}

$container = new SomePSR11CompliantContainer();
$container->set('greeting_service', function() {
    return new MyService('Hello, PSR-11!');
});

if ($container->has('greeting_service')) {
    $service = $container->get('greeting_service');
    echo $service->greet(); // Ausgabe: Hello, PSR-11!
}

Fazit

PSR-11 ist eine wichtige Schnittstelle für modernes PHP-Entwickeln, da sie Abhängigkeiten und deren Auflösung standardisiert. Dies führt zu flexibleren und besser wartbaren Anwendungen.

 

 

 


Zufalls-Technologie

Google Cloud PubSub


0 8phV3aYgNJ7Hnk7Q.png