Hallo, ich habe jetzt einige Stunden nach einem Fehler gesucht, obwohl es eigentlich richtig war (laut Dokumentation!). laut Docu gibt strpos($haystack, $needle) false zurück, wenn die $needle nicht im $haystack vorgekommen ist (ansonsten die Stelle an der die $needle vorgekommen ist). Jedoch gibt diese Funktion auch false zurück wenn $needle direkt am Anfang auftritt!!!!!!!!! Warum gibt die Funktion nicht -1 zurück wenn es nicht vorkommt, dann kann unterschieden werden zwischen nicht vorkommen im String und am Anfang des Strings vorkommen. Bei PHP entspricht ein Integer mit dem Wert 0 wohl dem FALSE. Siehe Docu: http://www.php.net/manual/en/function.strpos.php http://www.selfphp.info/funktionsreferenz/string_funktionen/strpos.php Sorry, aber die Funktion ist echt nicht durchdacht. Oder habe ich da einen Denkfehler? Grüße Oli
Hallo, ich habe jetzt einige Stunden nach einem Fehler gesucht, obwohl es eigentlich richtig war (laut Dokumentation!).
laut Docu gibt strpos($haystack, $needle) false zurück, wenn die $needle nicht im $haystack vorgekommen ist (ansonsten die Stelle an der die $needle vorgekommen ist). Jedoch gibt diese Funktion auch false zurück wenn $needle direkt am Anfang auftritt!!!!!!!!!
Warum gibt die Funktion nicht -1 zurück wenn es nicht vorkommt, dann kann unterschieden werden zwischen nicht vorkommen im String und am Anfang des Strings vorkommen.
Bei PHP entspricht ein Integer mit dem Wert 0 wohl dem FALSE.
Siehe Docu: http://www.php.net/manual/en/function.strpos.php http://www.selfphp.info/funktionsreferenz/string_funktionen/strpos.php
Sorry, aber die Funktion ist echt nicht durchdacht. Oder habe ich da einen Denkfehler?
Grüße
Oli
Eigentlich sollte folgender Code funktionieren.... if(strpos($haystack, $needle) === false) echo 'war wohl nix'; Bist du dir sicher das du direkt den Typ und Wert(===) abfragst und nicht nur den Wert(==)? Ansonsten sollte es mit dem Code funktionieren...(glaube ich) if(is_string(strpos($haystack, $needle))) echo 'war wohl nix'; mfg Stefan
On Wed, Mar 16, 2005 at 10:21:31AM +0100, Tim Oliver Wagner wrote:
Hallo, ich habe jetzt einige Stunden nach einem Fehler gesucht, obwohl es eigentlich richtig war (laut Dokumentation!).
laut Docu gibt strpos($haystack, $needle) false zurück, wenn die $needle nicht im $haystack vorgekommen ist (ansonsten die Stelle an der die $needle vorgekommen ist). Jedoch gibt diese Funktion auch false zurück wenn $needle direkt am Anfang auftritt!!!!!!!!!
Nein, in dem Fall gibt die Funktion einen nicht-boolean Wert zurück. Dieser wird jedoch bei einer Abfrage $p == false erstmal in einen boolean Wert umgewandelt der dann dummerweise false ist. Also erstmal mit $p === FALSE checken. Das Beispiel in der Dokumentation zeigt genau diesen Fall. Etwas gewöhnungsbedürftig ist die Sache schon. ciao Arvin -- Dipl.-Phys. Arvin Schnell SUSE LINUX Products GmbH Research & Development email: arvin@suse.de
On Wed, Mar 16, 2005 at 10:21:31AM +0100, Tim Oliver Wagner wrote:
Oder habe ich da einen Denkfehler?
Nee, eher einen Blickfehler, denn die Seite http://www.php.net/manual/en/function.strpos.php beschreibt im "WARNING" Block genau dein Problem und auch die entsprechende Loesung dazu. --
Am Mittwoch, 16. März 2005 11:45 schrieb Peter Wiersig:
On Wed, Mar 16, 2005 at 10:21:31AM +0100, Tim Oliver Wagner wrote:
Oder habe ich da einen Denkfehler?
Nee, eher einen Blickfehler, denn die Seite http://www.php.net/manual/en/function.strpos.php beschreibt im "WARNING" Block genau dein Problem und auch die entsprechende Loesung dazu.
Oh sorry, da stand ja wirklich der Vergelichsoperator === ... hatte ich wohl überlesen (bzw. falsch gelesen), da ich diesen bisher bei anderen Programmiersprachen nicht kennen gelernt hatte. Merci für die Erläuterungen. :-) Oli
Hallo
laut Docu gibt strpos($haystack, $needle) false zurück, wenn die $needle nicht im $haystack vorgekommen ist (ansonsten die Stelle an der die $needle vorgekommen ist). Jedoch gibt diese Funktion auch false zurück wenn $needle direkt am Anfang auftritt!!!!!!!!!
Warum gibt die Funktion nicht -1 zurück wenn es nicht vorkommt, dann kann unterschieden werden zwischen nicht vorkommen im String und am Anfang des Strings vorkommen.
-1 habe ich mir auch schon oft gewünscht. PHP ist manchmal sehr eigen. Ich denke, man hat da in den Anfängen der Sprache ein paar Dinge schlecht gemacht, will sich aber aus Gründen der Kompatibilität nicht davon trennen. Ungeschickt ist z.B. die bisweilen uneinheitliche Reihenfolge der Parameter. strpos() erwartet zuerst das, worin gesucht wird und dann das, was gesucht wird. array_search() aber erwartet zuerst das zu suchende und dann das zu durchsuchende. Also genau andersherum. Ich muss selbst nach Jahren noch jedesmal nachschlagen, welche Reihenfolge wann zum Einsatz kommt. Oder dass in Funktionsnamen die Wörter mal zusammengeschrieben werden und mal durch Unterstriche getrennt. Es wirkt ein bisschen so, als hätten die beteiligten Entwickler ohne Koordination ihre eigenen Suppchen gekocht. In Java würde man's korrigieren und das alte als deprecated noch ein paar Jahre mitlaufen lassen, aber bei PHP geht nichts verloren - ausser der Sinn (-; Auch so Sonderheiten wie dass isset() für eine Variable, die den Wert null hat, false liefert. Oder dass ein Vergleich wie '1' == '001' true ergibt, weil die Werte automatisch in Zahlen umgewandelt werden. Da sind schon einige Besonderheiten, die rauszufinden man schnell mal ein paar Stunden in den Sand setzen kann. Bye -- 1 Bodo Kaelberer 123 http://www.webkind.de/ http://www.kaelberer-aio.de/ 3 Seelig sind die, die da arm an Geist sind, denn sie werden 4 sich Christlich Soziale Union nennen.
participants (5)
-
Arvin Schnell
-
Bodo Kaelberer
-
Peter Wiersig
-
Stefan Galinski
-
Tim Oliver Wagner