dedlfix: Warum verlangt php hier einen expliziten Stringvergleich?

Beitrag lesen

Tach!

        if ($this->watermarkfile == "0") { ...

In $this->watermarkfile steht, wenn ich es per echo mal ausgeben lasse, vor der if-Abfrage der Pfad zum Wasserzeichen drin, somit wird nicht in die if-Bedingung hinein gesprungen, sondern in die anschließende else-Bedingung.

Hier findet ein Vergleich zweier Strings statt.

        if ($this->watermarkfile == 0) { ...

Dann wird die if-Bedingung als "true" gewertet und das Script macht innerhalb der if-Bedingung weiter.

Hier hast du einen String und eine Zahl. In dem Fall wird versucht, der String in eine Zahl zu konvertieren. Wenn da keine Zahl (am Anfang) drinsteht, ist das Ergebnis der Konvertierung 0. Damit ergibt der Vergleich true.

Das hätte ich nicht erwartet. Kann mir jemand erklären, warum das so ist? Ich hätte gedacht, dass mein Pfad (der ja in $this->watermarkfile drin steht, sowohl != "0", wie auch != 0 wäre.

Siehe auch PHP type comparision table.

Warum aber vergleichst du mit der Zahl 0 (egal ob String oder Zahl), wenn du da gar keine 0 erwartest? Es gäbe da beispielsweise null für einen nicht vorhandenen Wert.

dedlfix.