Warum typecasting ist nicht eine option in der PHP-Funktion Parameter
Mag dies wie eine dumme Frage für viele von Euch, aber es hält mich Fragen, warum PHP nicht erlauben typecasting in seiner Funktion Parameter. Viele Menschen verwenden diese Methode, zu werfen in den Parametern:
private function dummy($id,$string){
echo (int)$id." ".(string)$string
}
Oder
private function dummy($id,$string){
$number=(int)$id;
$name=(string)$string;
echo $number." ".$name;
}
Aber mit Blick auf die vielen anderen Programmiersprachen, Sie akzeptieren typecasting in Ihrer Funktion Parameter. Aber dies zu tun, in PHP kann zu Fehlern führen.
private function dummy((int)$id,(string)$string){
echo $id." ".$string;
}
Parse error: syntax error, unexpected T_INT_CAST, in der Erwartung, '&' or T_VARIABLE
Oder
private function dummy(intval($id),strval($string)){
echo $id." ".$string;
}
Parse error: syntax error, unexpected '(', expecting '&' or T_VARIABLE
Will nur wissen, warum dies nicht funktioniert, und wenn es einen Weg gibt. Wenn es keinen Weg gibt, dann werde der reguläre Weg ist okay für mich:
private function dummy($id,$string){
echo (int)$id." ".(string)$string;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
PHP hat eine rudimentäre type-hinting-Fähigkeit für arrays und Objekte, aber es funktioniert nicht auf Skalare Typen.
Array hinting Beispiel:
Objekt hinweisenden Beispiel
Wenn Sie brauchen, um die Durchsetzung einer skalaren Typ, müssen Sie es tun, durch Typisierung oder für die überprüfung der Art, in der die Funktion und die Rettung oder dementsprechend handeln, wenn es erhält den falschen Typ.
Werfen Ausnahmen, wenn Sie die falsche Art
Nur schweigend festgelegten params
Update: PHP 7 Fügt der Skalaren Type Hints
PHP 7 eingeführt hat Skalare type-Deklarationen mit strikten und nicht-strikten-Modi. Es ist nun möglich zu werfen, ein
TypeError
im strict-Modus, wenn eine Funktion argument-variable nicht genau dem deklarierten Typ oder zu zwingen, die Art, die im nicht-strict-Modus.$obj
ist nicht eine Instanz vonmyClass
, schwerwiegender Fehler.PHP erlauben dies nur für Objekttypen, und ich vermute, es ist, weil die Sprache ist so schwach typisierten sonst. Bedenken Sie:
Dieser code ist syntaktisch okay (d.h. kompiliert), aber es ist ein Laufzeit Fehler:
Beachten Sie, dass es auf der Suche nach einem Instanz einer Klasse namens
int
.Für alle Besucher hier von Google, werden Sie wahrscheinlich wissen, dass Sie jetzt, mit php 7.x, können Sie erklären, alle parameter-Typen, einschließlich skalaren:
Mehr:
http://php.net/manual/en/migration70.new-features.php