Generics in PHP: wozu sie dienen und wie man sie mit Beispielen verwendet

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Generics in PHP: wozu sie dienen und wie man sie verwendet



Moderne PHP-Entwicklung erfordert nicht nur Geschwindigkeit, sondern auch Code-Zuverlässigkeit. Eines der Werkzeuge, das hilft, dieses Ziel zu erreichen, sind Generics (generische Typen). Obwohl PHP eine dynamisch typisierte Sprache ist, wurde mit PHP 7.0 und höher, insbesondere mit PHP 8.0, statische Typisierung verfügbar und gefragt. Generics ermöglichen es, flexiblere, wiederverwendbare und sicherere Datenstrukturen wie Collections, Stacks, Queues und Repositories zu schreiben, ohne Typinformationen zu verlieren.



In diesem Artikel werden wir im Detail besprechen, was Generics in PHP sind, wozu sie dienen, wie man sie in der Praxis richtig einsetzt, und konkrete Codebeispiele betrachten.



Was sind Generics und wozu dienen sie?



Generics (generische Typen) sind ein Mechanismus, der es ermöglicht, Klassen, Interfaces, Traits und Funktionen mit einem Datentyp zu parametrisieren. Anstatt eine separate Implementierung für jeden Typ zu schreiben (z.B. IntegerList, StringList, UserList), erstellt man eine universelle Klasse List<T>, wobei T ein Platzhalter für den konkreten Typ ist, der bei der Verwendung übergeben wird.



Wozu ist das nötig?

  • Typsicherheit: IDEs und statische Analysetools (Psalm, PHPStan) können prüfen, ob nur Elemente eines Typs in eine Collection gelangen, und verhindern so Fehler bereits in der Entwicklungsphase.
  • Reduzierung von Code-Duplizierung: Sie müssen nicht dieselbe Klasse für verschiedene Datentypen schreiben.
  • Verbesserte Lesbarkeit: Der Code wird selbstdokumentierend – man sieht sofort, welche Datentypen erwartet werden.
  • Leistungssteigerung: Obwohl PHP selbst Generics nicht auf Ebene der virtuellen Maschine nutzt (wie Java oder C#), helfen statische Analysetools, potenzielle Fehler vor der Codeausführung zu finden.


Wie verwendet man Generics in PHP? Syntax und Beispiele



Ab PHP 8.0 wurde die Unterstützung für Generics auf Annotationsebene (Docblock) und teilweise auf Codeebene (für variadische Argumente) eingeführt. Eine vollständige Unterstützung auf Syntaxebene wird in zukünftigen Versionen erwartet, aber bereits jetzt können Generics effektiv mit PHPDoc und statischen Analysetools genutzt werden.



1. Grundlegende Syntax mit PHPDoc



Die gebräuchlichste Methode ist die Verwendung der Annotationen @template und @param/@return mit Angabe des generischen Typs.



<?php

/** * @template T */class Collection { /** @var array<T> */ private array $items;

/** * @param T $item */ public function add($item): void { $this->items[] = $item; }

/** * @return T|null */ public function get(int $index) { return $this->items[$index] ?? null; }}

// Beispiel zur Verwendung$intCollection = new Collection();$intCollection->add(42);// $intCollection->add('string'); // Fehler des statischen Analysetools

$userCollection = new Collection();$userCollection->add(new User());// $userCollection->add(123); // Fehler?>


In diesem Beispiel deklariert @template T den generischen Typ. @param T $item und @return T|null teilen dem Analysetool mit, dass der Typ der Elemente konsistent sein muss.



2. Typeinschränkungen (bounded generics)



Sie können einschränken, welche Typen als Parameter verwendet werden dürfen. Dies geschieht mit @extends oder @implements.



<?php

/** * @template T of \\Stringable */class StringableCollection { /** @var array<T> */ private array $items;

/** * @param T $item */ public function add($item): void { $this->it

Blogs

Buchempfehlungen