Kategorie PHP

PHP 7 Typdeklarationen

Lesezeit ca. 3 Min.

Neu in PHP 7 ist die Möglichkeit, bei Klassenmethoden die Parameter und die Rückgabewerte mit Typdeklarationen zu versehen und bei der Übergabe von falschen Datentypen einen Laufzeitfehler zu erzeugen. Mit den PHP 7 Typdeklarationen könnte man sagen, dass PHP als Programmiersprache endlich erwachsen geworden ist.

Vor PHP 7 musste man den Datentyp für die Parameter von Funktionen und Klassenmethoden nicht explizit deklarieren. Ebenso wurde nicht der Datentyp des Rückgabewert einer Funktion oder Klassenmethode deklariert. Es konnten alle Datentypen übergeben werden, sowohl in eine Funktion oder Methode hinein, als auch daraus heraus. Intern wurden die Parameter als Strings behandelt und je nach Anwendungfall entsprechend konvertiert. Als Programmierer hatte man jedoch keinen Einfluß auf den Datentyp, hatte allerdings die Freiheit, jeden Datentyp zu verwenden. Dies konnte bei manchen Anwendungen zu großen Problemen führen, weil es zu Seiteneffekten führen konnte, wenn der falsche Datentyp übergeben wurde.

Skalare Typdeklarationen

Seit PHP 7 ist dies nun anders. Man kann nun skalare Datentypen für Integer, Fließkommazahlen, Strings und boolsche Werte für Funktionen und Klassenmethoden deklarieren. Hierzu einige Beispiele:

class Person
{
  public function alter(int $age)
  {
    return $age;
  }
  public function name(string $name)
  {
    return $name;
  }
  public function isActive(bool $active)
  {
    return $active;
  }
}

$person = new Person();
echo $person->name('Hans Mustermann');
echo $person->alter(45);
echo $person->isActive(TRUE);

In dem gezeigten Code wird eine Klasse Person mit drei Klassenmethoden erstellt. Jede Methode enthält jeweils einen Übergabeparameter mit einem anderen Datentyp. In dem Beispiel werden jeweils der richtige Datentyp übergeben, so dass der Code korrekt ausgeführt wird. Würde man nun der Methode alter() eine Fließkommazahl übergeben, so würde das PHP Programm trotzdem richtig arbeiten. Das liegt daran, dass standardmäßig skalare Typdeklarationen nicht restriktiv sind. Das bedeutet, dass eine Fließkommazahl akzeptiert wird, obwohl ein Integer erwartet wird.

Dieses Verhalten lässt sich jedoch ändern, indem man am Anfang einer PHP Datei die folgende Zeile einfügt:

declare(strict_types = 1);

Nun wird die Übergabe einer Fließkommazahl an eine Methode, die einen Integer erwartet, einen „Fatal Error“ erzeugen. Ebenso wäre es, wenn man einen String anstelle eines boolschen Wertes übergeben würde.

echo $person->isActive('true');

Auch dieses Beispiel erzeugt eine Fehlermeldung.

Typdeklarationen bei Rückgabewerten

Eine weitere wichtige Neuerung ist die Möglichkeit, den Datentyp eines Rückgabewertes von Klassenmethoden und Funktionen festzulegen. Dazu modifiziere ich das obige Beispiel mit der Klasse Person.

class Person
{
  public function alter(int $age) : string
  {
    return 'Das Alter ist ' . $age;
  }
  public function name(string $name) : string
  {
    return $name;
  }
  public function isActive(bool $active) : string
  {
    return ($active) ? 'Ja' : 'Nein';
  }
}

Der Rückgabewert wurde mit der „: datentyp“ Syntax definiert. Der Datentyp des Rückgabewertes muss nicht dem Datentyp des Übergabeparameters entsprechen.

Der Vorteil von Typdeklarationen liegt darin, dass nicht versehentlich Daten im falschen Format an eine Klassenmethode oder Funktion übergeben werden, die dann zu einer fehlerhaften Ausführung führen. Idealerweise dokumentiert man die Übergabe- und Rückgabeparameter und vermerkt dabei auch den Datentyp der jeweiligen Parameter.

Durch die Implementierung von Typdeklarationen in PHP 7 ist die Sprache einen Schritt näher zu einer vollwertigen Programmiersprache gekommen (im Vergleich zu der reinen Skriptsprache, die PHP anfangs noch gewesen ist).

Ähnliche Artikel:

Fragen oder Feedback zu diesem Artikel

Deine E-Mail-Adresse wird nicht veröffentlicht.