Unbeabsichtigte Folge einer losen Überprüfung des Rückgabewerts von strpos()
Wenn Sie strpos() verwenden, um einen Teilstring innerhalb eines Strings zu lokalisieren, ist es wichtig, Folgendes zu tun Verstehen Sie die potenziellen Fallstricke bei der Verwendung von Gleichheits- oder Ungleichheitsvergleichen zur Bewertung des Rückgabewerts. Während in der PHP-Dokumentation angegeben ist, dass strpos() „false“ zurückgibt, wenn die Teilzeichenfolge nicht gefunden wird, kann dies zu unerwarteten Ergebnissen führen, wenn 0 zurückgegeben wird (was den Anfang der Zeichenfolge anzeigt).
Um dieses Problem zu veranschaulichen, betrachten Sie Folgendes: Folgender Codeausschnitt:
if ( strpos($grafik['data'], $ss1) <> false && strpos($grafik['data'], $ss2) <> false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Die Absicht besteht darin, das Vorhandensein von $ss1 und $ss2 in $grafik['data'] zu überprüfen und sicherzustellen, dass $ss1 vorher erscheint $ss2. Dies berücksichtigt jedoch nicht die Tatsache, dass strpos() 0 zurückgibt, wenn $ss1 am Anfang der Zeichenfolge beginnt.
Gemäß der PHP-Dokumentation:
Warnung
Diese Funktion gibt möglicherweise den booleschen Wert FALSE zurück, kann aber auch einen nicht booleschen Wert zurückgeben, der als FALSE ausgewertet wird, z als 0 oder „“. Weitere Informationen finden Sie im Abschnitt über Boolesche Werte. Verwenden Sie den ===-Operator, um den Rückgabewert dieser Funktion zu testen.
Um dieses Problem zu beheben, ist es notwendig, den strikten Gleichheitsoperator === anstelle des losen Gleichheitsoperators == zu verwenden.
if ( strpos($grafik['data'], $ss1) !== false && strpos($grafik['data'], $ss2) !== false && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2) )
Durch die Verwendung von === wertet der Vergleich den Rückgabewert von strpos() korrekt als wahr aus, wenn die Teilzeichenfolge gefunden wird. Diese Änderung stellt das beabsichtigte logische Verhalten des Code-Snippets sicher.
Das obige ist der detaillierte Inhalt vonWarum führt eine lose Überprüfung des Rückgabewerts von „strpos()' zu unerwarteten Ergebnissen in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!