Quicktip: Rest-Parameter für typisierte Arrays
bearbeitet von 1unitedpowerWir machen mal ein Rollenspiel, du bist der Programmierer und hättest dieses Programm geschrieben, ich bin der Typchecker.
~~~php
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.