| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

05-01-2011, 09:23
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
While Schleife - Vergleichsoperator !==
Ich habe ein Verständisproblem bei dem !== Operator.
Definition von PHP.net
Zitat:
|
Gibt TRUE zurück, wenn $a nicht gleich $b ist, oder wenn beide nicht vom gleichen Typ sind
|
und folgender Code Ausschnitt:
PHP-Code:
while (false !== ($file = readdir($handle))) { echo "$file\n"; }
readdir gibt entweder einen boolschen Wert oder 0 oder 1 [...] zurück
Wenn nun von readdir eine 0 zurückgegeben würde, dann wäre diese doch vom Typ aber unterschiedlich von false und somit wäre die Bedingung true oder?
Das ist ja aber eigentlich nicht gewollt, was verstehe ich da falsch?
|

05-01-2011, 09:32
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Seit wann darf eine Datei oder Ordner nicht den Namen 0 haben?
Wozu überhaupt readdir ?
Es gibt schönere Methoden Verzeichnisse auszulesen.
Geändert von combie (05-01-2011 um 09:37 Uhr)
|

05-01-2011, 11:02
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Ich glaube, du hast meine Frage nicht ganz verstanden.
Nicht als Name 0 oder 1 sondern als Rückgabewert (0 = false, ...).
Hier das komplette Beispiel:
(unter
Beispiel #1 Alle Dateien eines Verzeichnisses auflisten)
PHP: readdir - Manual )
Schönere Methoden, OK, bin Anfänger und es geht ja auch mehr um das !==
|

05-01-2011, 11:04
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von einermeiner
readdir gibt entweder einen boolschen Wert oder 0 oder 1 [...] zurück
|
Nö.
"Returns the filename on success or FALSE on failure."
PHP: readdir - Manual
|

05-01-2011, 11:05
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Etwas weiter unten auf der von dir verlinkten Seite:
Zitat:
|
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
|
|

05-01-2011, 11:08
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Wenn eine Datei "0" heißt, gibt die Funktion natürlich 0 zurück. Aber was ist jetzt dein Problem?
Zitat:
|
readdir gibt entweder einen boolschen Wert oder 0 oder 1 [...] zurück
|
Diese Aussage ist jedenfalls falsch. Die Funktion kann "0" zurück geben, aber es kann auch jeder andere String sein.
Zitat:
|
ent|we|der [Konj.; nur in der Fügung] e. - oder (drückt aus, dass nur eine von zwei oder mehreren Möglichkeiten eintritt oder in Frage kommt);
|
Geändert von h3ll (05-01-2011 um 11:13 Uhr)
|

05-01-2011, 11:31
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Im Zitat steht aber doch der Beleg dafür oder?
Problem:
PHP-Code:
while (false !== ($file = readdir($handle))) { echo "$file\n"; }
angenommen es wird 0 (im Sinne von false ) zurückgegeben, so sollte das Skript eigentlich ja beendet werden, doch, da 0 ein anderer Datentyp ist wie false, so wird es dann trotzdem fortgesetzt.
Mit != funktioniert es hingegen, deshalb verstehe ich den Hinweis nicht, warum !== verwendet werden soll
Soll mir die Definition von entweder sagen, dass auf jeden Fall TRUE / FALSE zurückgegeben wird und 0,1,... optional sind?
Geändert von einermeiner (05-01-2011 um 11:33 Uhr)
|

05-01-2011, 11:39
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von einermeiner
angenommen es wird 0 (im Sinne von false ) zurückgegeben, so sollte das Skript eigentlich ja beendet werden
|
Wer sagt, dass 0 im Sinne von FALSE ist?
|

05-01-2011, 11:43
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Zitat:
|
[...] als auch einen nicht-boolschen Wert, wie zum Beispiel 0 oder "", der von einem einfachen if-Statement als FALSE ausgewertet wird.
|
Oder?
|

05-01-2011, 11:55
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
Habe noch einmal darüber nachgedacht, wenn ihr mir folgende Frage beantwortet, habe ich es wahrscheinlich verstanden (dauert heute aber auch lange...):
Gibt readdir immer FALSE / TRUE wieder und 0 / 1 noch zusätzlich oder wird immer nur eines der beiden ausgegeben?
|

05-01-2011, 12:22
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
|
Gibt readdir immer FALSE / TRUE wieder und 0 / 1 noch zusätzlich oder wird immer nur eines der beiden ausgegeben?
|
Unsinn!
PHP kennt nur wenige Datentypen!
Aber es kennt Boolean und Strings.
readdir() kann nur Boolean FALSE oder einen String liefern.
Damit ist klar, wenn man den Typesicheren Vergleich !== wählt, man nur auf FALSE testen muss, um zu erfahren, ob readdir() am "Ende" ist.
|

05-01-2011, 12:23
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von einermeiner
Gibt readdir immer FALSE / TRUE wieder und 0 / 1 noch zusätzlich oder wird immer nur eines der beiden ausgegeben?
|
Weder noch.
Die Funktion gibt FALSE oder einen String zurück. TRUE kommt niemals vor.
|

05-01-2011, 14:40
|
|
einermeiner
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 104
|
|
OK, da gibt es dann noch ein Allgemeines Problem zu, deswegen konnte ich es nicht ganz verstehen, dazu habe ich aber ein separates Thema eröffnet.
Danke euch schonmal!
Allgmeine Frage zu while Schleife - Bedingung
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|