1unitedpower: Quicktip: Rest-Parameter für typisierte Arrays

Beitrag lesen

Wir machen mal ein Rollenspiel, du bist der Programmierer und hättest dieses Programm geschrieben, ich bin der Typchecker.

function ints (int ...$rest) : array {
  return $rest;
}
var_export(ints(1,2,3));
var_export(ints('foo'));

Du: „Ey Typchecker, ist das Programm korrekt getypt?“
Ich: „Nope, denn das Argument 'foo' in dem Ausdruck ints('foo') ist vom Typ string, aber ich hätte da einen int-Wert erwartet. Wenn du das nicht behebst bevor einer das Programm ausführt, könnte es hier zu einem Laufzeit-Fehler kommen.“
Du: „Ich verstehe. Und wenn ich 'foo' durch 42 ersetze?“
Ich: „Dann hab ich nichts weiter zu meckern. Wenn das Programm jetzt ausgeführt wird, gibt es keinen Typfehler zur Laufzeit.“
Du: „Wow, und das kannst du sehen ohne das Programm selber auszuführen?“
Ich: „Ja, ich gucke mir nur den Syntax-Baum an.“
Du: „Danke.“
Ich: „Nicht dafür.“

Und nun zurück zu deiner Antwort:

Hab grad Deinen Code getestet: Er wirft eine Exception:

Uncaught TypeError: Argument 1 passed .... thrown.

Du hast also das Programm ausgeführt, obwohl der Typchecker dir prophezeit hat, dass das Programm fehlerhaft ist und es zu einem Laufzeit-Typfehler kommen kann, wenn du den Fehler nicht behebst. Und es ist genau das eingetreten, was der Typchecker dir gesagt hat.