Ja, jetzt ist es möglich. Nach einer langen Diskussion wurde gerade ein Vorschlag zur Implementierung von Typhinweisen für Skalarfunktionsparameter und Rückgabewerte mit der höchsten Stimmenzahl genehmigt. Überprüfen Sie auf Details:
Skalare Typhinweise bestehen aus der Deklaration der Typen von Funktionsparametern und Rückgabewerten, die vom Typ int, float, string und bool sein können. Auf diese Weise kann die PHP-Laufzeit-Engine überprüfen, ob die an Parameterfunktionen und Rückgabewerte übergebenen Wertetypen von sind die erwarteten Typen, um eventuelle Programmierfehler zu erkennen. Tipphinweise für Objekte, Arrays und Callables waren bereits in früheren PHP-Versionen zulässig. Die aktuelle Implementierung führt fünf neue reservierte Wörter ein: int, float, bool, string und numeric. Diese waren bisher nicht reserviert, da das Gießen im Lexer ein Sonderfall ist.
Example :
function test(float $a) {
var_dump($a);
}
test(1);
test("1");
test(1.0);
test("1a");
test("a");
test("");
test(1.5);
test(array());
test(new StdClass);
Sie haben auch die Möglichkeit, in eine Quelldatei zu deklarieren, in der Sie Hinweise auf Scaler-Typen zulassen können. Dies muss die erste Zeile Ihres Konfigurationsskripts sein und kann nicht an anderer Stelle in derselben Datei deklariert werden.
Like : declare(strict_types=1);
Wenn die PHP-Engine zur Laufzeit versucht, einen Wert zurückzugeben, prüft sie, ob sie nicht mit der angegebenen übereinstimmt. Sie gibt einen schwerwiegenden Fehler aus, wie z. B. Schwerwiegender Fehler: Argument 1, das an increment () übergeben wird, muss vom Typ Integer sein, Zeichenfolge angegeben
Mit diesen neuen Deklarationsfunktionen können Sie robustere Anwendungen schreiben, indem Sie frühzeitige Programmierfehler erkennen, die durch die Übergabe von Werten des falschen Typs an Funktionen verursacht werden.
Es kann auch zu automatischen Typänderungen kommen. Beispielsweise können int-Typen automatisch in Float-Typparameter geändert werden.
function test(float $x){
var_dump($x);
}
test(10);
Rückgabe des Rückgabetyps
Wir können die Rückgabetypen deklarieren, indem wir einen Doppelpunkt gefolgt vom erwarteten Typ zwischen der letzten Klammer und der ersten Klammer in der Funktionsdeklaration hinzufügen.
Für Funktionen, die keinen Wert zurückgeben, sollte im Abschnitt zur Deklaration des Rückgabetyps nichts hinzugefügt werden.
function mustReturnInt(): int { ... }
function mustReturnString(): string { ... }
function mustReturnBool(): bool { ... }
function mustReturnFloat(): float { ... }
function doesNotReturnAnything() { ... }
Ein etwas komplexeres Beispiel
declare(strict_types=1);
class StrictTypesTestingClass {
public function returnSameInt(int $value): int { return $value; }
public function returnSameFloat(float $value): float { return $value; }
public function returnSameString(string $value): string { return $value; }
public function returnSameBool(bool $value): bool { return $value; } }
$check = new StrictTypesTestingClass();
print $check->returnSameFloat(10.0);
print $check->returnSameString("test");
print $check->returnSameBool(true) ? 'true' : 'false';
print $check->returnSameInt("10");
print $check->returnSameFloat("10.0");
print $check->returnSameString(10);
print $check->returnSameBool("true");
Verhalten der schwachen Typprüfung und Typkonvertierung: Der schwache Typprüfungsmodus kann mit der Anweisung declare (strict_types = 0) verwendet werden. oder das Fehlen der strengen Typendeklaration. Es gibt einige Punkte, die berücksichtigt werden müssen: Aufrufe einer Erweiterung oder integrierten PHP-Funktion mit schwachen Typprüfungen haben dasselbe Verhalten wie in früheren PHP-Versionen. Die Regeln für die schwache Typprüfung für neue skalare Typdeklarationen sind größtenteils dieselben wie die von Erweiterung oder integrierte PHP-Funktionen. NULL ist ein Sonderfall, um mit den aktuellen Typdeklarationen für Klassen, aufrufbare Dateien und Arrays übereinzustimmen. NULL wird standardmäßig nicht akzeptiert, es sei denn, es ist ein Parameter und erhält explizit den Standardwert NULL, zum Beispiel: Funktionsbeispiel (int $ a = NULL);
Dieser Ansatz bietet viele Vorteile. Sie erhalten Typensicherheit. Das heißt, Sie können den Code endlich statisch analysieren! Sie können Fehler erkennen, bei denen Sie versehentlich eine Zeichenfolge von einer Funktion übernehmen und als Ganzzahl an eine andere übergeben. Für mich, einen Entwickler, der täglich PHP verwendet und Java als Referenz für OOP-Sprachen betrachtet, ist dies ein großer Fortschritt für PHP .