Heim > Backend-Entwicklung > PHP-Tutorial > Warum führt eine lose Überprüfung des Rückgabewerts von „strpos()' zu unerwarteten Ergebnissen in PHP?

Warum führt eine lose Überprüfung des Rückgabewerts von „strpos()' zu unerwarteten Ergebnissen in PHP?

Barbara Streisand
Freigeben: 2024-12-11 20:15:11
Original
808 Leute haben es durchsucht

Why Does Loosely Checking `strpos()`'s Return Value Lead to Unexpected Results in PHP?

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)
)
Nach dem Login kopieren

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)
)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage