In PHP gibt es die Möglichkeit den type hint beim Abruf von Methoden und Funktionen für die Eingabe- aber auch die Rückgabeparameter festzulegen. Dabei gibt es allerdings noch geringfügige Unschärfen, da diese bei skalaren Datentypen nicht restriktiv verwendet werden.
Das bedeutet, wenn eine Zahl als String übergeben wird und der type hint ein Integer verlangt, dass dieser Aufruf dennoch valide ist.
<?php
function hello(integer $world) {
echo $world;
}
hello("1000");
Dies gilt auch für andere Varianten. Da dies formal gesehen jedoch falsch ist kann eine absolute korrekte Typdeklaration und -überprüfung dessen erzwungen werden. Dafür wird zu Beginn der betroffenen PHP-Datei folgender Aufruf abgesetzt:
<?php
declare(strict_types=1);
function hello(integer $world) {
echo $world;
}
hello("1000");
Damit ist es nun mit dem oben genannte Beispiel nicht mehr möglich das Skript auszuführen und es folgt in diesem Beispiel beim Abruf der Methode eine TypeError Fehlermeldung:
TypeError: Argument 1 passed to hello() must be of the type int, string given
Hierbei ist es wichtig anzuerkennen, dass diese Defintion nur für die aktuelle Datei gilt. Dieses declare kann nicht global gesetzt und Projektübergreifend verwendet werden. Nicht auszudenken wie sich diese Einstellung auf vendor-Produkte anderer Projekte auswirken würde.
Es macht meiner Einschätzung nach Sinn diese Einstellung in Klassen zu verwenden bei denen eine ganz klare Typisierung für z.B. eine sichere Berechnung von Zahlen notwendig ist. Pauschal diese Definition in jede bestehende Klasse zu integrieren lehne ich persönlich aus Gründen der besseren Lesbarkeit und der damit verbunden Wartung ab. Bei neuen Klassen hingegen macht dies schon Sinn.