Hallo Richard,
In Perl kann ich schreiben:
while(defined( my $file = readdir( $handle ) ){
Warum geht in PHP nicht:
while(isset( $file = readdir( $handle ) )
Ganz einfach: readdir gibt im Fehlerfall false zurück - und das ist ein Wert des Datentyps bool. Isset prüft dagegen nur, ob eine Variable _existiert_. Nachdem ich dieser Variable aber einen Wert zugewiesen habe, muss diese Zwangsläufig existieren. Ich erachte hier die Perl-Variante für unlogischer, da die Variable $file ja eigentlich zwangsläufig existieren müßte, wenn ich ihr etwas zuweise.
Aber wenn es Dich so sehr stört:
function is_not_false ($var) {
return $var !== false;
}
while (is_not_false ($file = readdir ($handle))
Warum braucht PHP dann einen === Operator und Java nicht,
Weil Java streng typisiert ist. (oder wie das jetzt genau heißt) Eine Variable, die einmal definiert ist, kann ihren Typ nicht mehr ändern, [1] man muss den Typ der Variable sogar beim Erstellen der Variable angeben.
warum hat Perl keinen,
Weil es in Perl nur wenige Haupttypen an Variablen gibt: Skalare, Listen, Hashes, Dateidesktriptoren, Objekte und Referenzen. Eine Zahl, ein Bool-Wert und eine Zeichenkette werden alle durch den gleichen "Typ" repräsentiert.
Weil er überflüssig ist.
Nur, wenn keine implizierte Typkonvertierung (von Variablen selbst) stattfindet (Java) oder die Sprache überhaupt keine verschiedenen skalaren Typen kennt. (Perl)
Ich halte den Identitätsoperator innerhalb des Variablen- und Typkonzepts von PHP durchaus für eine logische Notwendigkeit. Dass Dir das Typkonzept nicht unbedingt gefallen muss, ist eine andere Sache.
Viele Grüße,
Christian
[1] Kindklassen lasse ich jetzt einmal unter den Tisch fallen.