Generics in PHP: warum sie nützlich sind und wie man sie für Anfänger 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

Einführung in Generics in PHP: Was ist das und warum wird es benötigt



Wenn Sie gerade erst anfangen, PHP zu lernen, oder bereits eine Weile damit programmieren, sind Sie sicherlich auf Situationen gestoßen, in denen eine Funktion oder Klasse mit verschiedenen Datentypen arbeiten muss. Zum Beispiel erstellen Sie eine Sammlung, die sowohl Zahlen als auch Zeichenfolgen und Objekte speichern kann. Ohne Generics (generische Typen) müssen Sie entweder separate Klassen für jeden Typ schreiben oder gemischte Typen (mixed) verwenden, was die Codesicherheit verringert.



Generics sind ein Mechanismus, der es ermöglicht, Klassen, Schnittstellen und Funktionen zu erstellen, die mit verschiedenen Datentypen arbeiten, während die strenge Typisierung erhalten bleibt. In PHP wurde die Unterstützung für Generics ab Version 8.0 eingeführt und in PHP 8.1 und 8.2 erheblich verbessert. In diesem Artikel werden wir untersuchen, warum sie benötigt werden, wie man sie verwendet und welche Vorteile sie bieten.



Warum werden Generics in PHP benötigt?



Das Problem des Fehlens generischer Typen

Stellen Sie sich vor, Sie schreiben eine Klasse für die Arbeit mit einer Liste von Elementen. Ohne Generics müssten Sie den Typ mixed verwenden oder separate Klassen für jeden Datentyp schreiben:



<?php// Ohne Generics – unsicherclass SimpleList {    private array $items = [];

public function add($item): void { $this->items[] = $item; }

public function get(int $index): mixed { return $this->items[$index] ?? null; }}

// Verwendung$list = new SimpleList();$list->add(42);$list->add('Zeichenfolge'); // Kein Fehler, aber Logik ist verletzt$value = $list->get(0); // Typ mixed – IDE zeigt nicht an, dass es int ist?>


Wie Sie sehen, führt dieser Ansatz zu potenziellen Fehlern: Sie könnten versehentlich eine Zeichenfolge dort hinzufügen, wo nur Zahlen erwartet werden, und die IDE kann Sie nicht davor warnen.



Vorteile von Generics

  • Typsicherheit: Compiler und IDE überprüfen die Typkonformität bereits beim Schreiben des Codes.
  • Wiederverwendbarkeit: Eine Klasse oder Funktion arbeitet mit beliebigen Datentypen.
  • Lesbarkeit des Codes: Es ist sofort klar, welche Typen erwartet werden.
  • Weniger Fehler: Zufällige Typenkonflikte werden ausgeschlossen.


Mit Generics wird dieselbe Listenklasse sicher und universell:



<?php// Mit Generics – sicherclass GenericList {    private array $items = [];

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

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

// Verwendung$intList = new GenericList();$intList->add(42);// $intList->add('Zeichenfolge'); // Typfehler!

$stringList = new GenericList();$stringList->add('Hallo');$value = $stringList->get(0); // IDE weiß, dass es string ist?>


Wie man Generics in PHP verwendet



Grundlegende Syntax

Generics werden in PHP mit spitzen Klammern <> und dem Buchstaben T (von Type) deklariert – dies ist der allgemein übliche Name für die Typvariable. Sie können beliebige Namen verwenden, aber T ist der Standard.



Beispiel mit einer Klasse:

<?phpclass Container {    private T $value;

public function __construct(T $value) { $this->value = $value; }

public function getValue(): T { return $this->value; }}

$intContainer = new Container(100);$stringContainer = new Container('Hallo');?>


Typeinschränkungen

Manchmal ist es erforderlich, dass der Typparameter einem bestimmten Interface oder einer Klasse entspricht. Dazu werden Einschränkungen (Bounds) verwendet:



<?phpinterface Printable {    public function print(): string;}

class Document implements Printable { public function print(): string { return 'Dokument'; }

Blogs

Buchempfehlungen