Hallo!
Aber ich verwette mein letztes Hemd, dass selbst im brandneuen PHP5 Konstrukte wie folgt funktionieren:
Jo, die Wette solltest Du gewinnen, aber Du wirst vermutlich niemanden finden der darum mit Dir wetten wollte, ist ja so als würde ich mit Dir wetten wollen dass ich Andreas heiße oder dass heute Donnerstag ist...
$flag = "test";
if ($flag) {
echo "$flag ist eigentlich nicht true, aber für php eben doch";
}$flag = 3;
if ($flag) {
echo "$flag ist eigentlich nicht true, aber für php eben doch";
}EINZIG RICHTIG:
Wer oder was sagt das? Nur weil es in einer anderen Programmiersprache nur so "EINZIG RICHTIG" ist, muss das noch lange nicht bei PHP so sein. Bei PHP ist alles was Du oben genannt hast korrekt und gewollt. Wenn einem das nicht gefällt kann man gerne eine andere Sprache verwenden, die einem besser gefällt. So einfach ist das ;-)
$flag = true;
if ($flag) {
echo "$flag ist true";
}So. Das heisst für mich unsauber!
;-)
Ok, zum mitschreiben ;-):
http://de3.php.net/manual/de/control-structures.php#control-structures.if
" if (ausdr)
Anweisung
Wie im Abschnitt über Ausdrücke beschrieben, wird ausdr auf seinen boolschen Wertinhalt ausgewertet. Wenn ausdr als TRUE ausgewertet wird, führt PHP die Anweisung aus. Falls die Auswertung FALSE ergibt, wird die Anweisung übergangen. Mehr Informationen drüber welche Werte als FALSE ausgewertet werden finden Sie im Abschnitt 'Umwandlung nach boolean'. "
Ok, gucken wir auch da:
http://de3.php.net/manual/de/language.types.boolean.php#language.types.boolean.casting
"Bei der Umwandlung nach boolean werden folgende Werte als FALSE angesehen:
* das boolean FALSE selbst
* die Integer 0 (Null)
* die Fließkomma-Zahl 0.0 (Null)
* ein Array ohne Elemente
* ein Objekt ohne Mitgliedsvariablen
* der spezielle Typ NULL (einschließlich nicht definierter Variablen)
Jeder andere Wert wird als TRUE angesehen (einschließlich jeder Resource)."
Das sind die Regeln die man kennen muss. Und wenn man die kennt ist das ganze wirklich sehr einfach. Wenn man eben typensicher testen muss verwendet man if ($val === mixed), z.B.
if ($val === TRUE)
dann erreichst Du das was Du erwartest. Nur ist das oft nicht notwendig. Es ist halt so gewollt, und die meisten Leute können damit gut leben :)
Ich will ja auch nicht sagen dass es nur Vorteile hat :)
Das ist halt eine Gewöhnungssache. Bei kleinen Formmailern ist das ganze Thema recht unwichtige, bei größeren Applikationen muss man halt wissen was man tut, genauso wie bei jeder anderen Sprache auch.
Auch noch lesenswert:
http://de3.php.net/manual/en/language.expressions.php
überhaupt: ich bin nicht "gegen" PHP, ich liiiebe PHP, das lässt so schön unsaubere und schnelle programmierung zu... *lach*
Naja, für mich findet "unsaubere Programmierung" auf einem anderen Level statt, halt so Sachen wie unsaubere Verwendung von OOP oder globalen Variablen...
Streich "unsaubere" und ich unterschreib den Satz ;-)
Grüße
Andreas