Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt der Vergleich von strpos() mit „=== true' bei PHP-String-Suchen fehl?
Unbeabsichtigte Wahrheit: Die Nichtübereinstimmung in strpos()-Vergleichen verstehen
Trotz ihrer häufigen Verwendung für String-Suchen hat die PHP-Funktion strpos() ein unkonventionelles Verhalten beim Vergleich des Ergebnisses mit „true“. Um diese Anomalie zu verstehen, untersuchen wir einen Codeausschnitt:
$link = 'https://google.com'; $unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png']; foreach ($unacceptables as $unacceptable) { if (strpos($link, $unacceptable) === true) { echo 'Unacceptable Found<br />'; } else { echo 'Acceptable!<br />'; } }
Überraschenderweise gibt dieser Code „Akzeptabel!“ aus. für jedes Element im $unacceptables-Array, auch wenn „https:“ in der $link-Variablen vorhanden ist.
Um dieses Rätsel zu lösen, müssen wir uns mit der Semantik von strpos() befassen. Wie in der Dokumentation angegeben, gibt strpos() die „numerische Position des ersten Vorkommens“ der Zeichenfolge $inacceptable innerhalb von $link zurück. In diesem Fall findet strpos() „https:“ an Position 0 und gibt 0 zurück, was in PHP ein wahrer Wert ist.
Daher ist die Bedingung in der if-Anweisung (strpos($link, $unacceptable) === true) wird jedes Mal als true ausgewertet, da strpos() immer eine numerische Position zurückgibt, die immer in einen booleschen Wert true umgewandelt wird.
Zur Korrektur Dazu sollten wir einen nicht strengen Vergleichsoperator (!==) verwenden:
if (strpos($link, $unacceptable) !== false) {
Indem wir den Vergleich in „ungleich falsch“ ändern, stellen wir sicher, dass die if-Anweisung nur bei strpos als wahr ausgewertet wird () findet eine Übereinstimmung und gibt einen Wert ungleich Null zurück (d. h. jede numerische Position außer 0).
Das obige ist der detaillierte Inhalt vonWarum schlägt der Vergleich von strpos() mit „=== true' bei PHP-String-Suchen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!