Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt der Vergleich von strpos() mit „=== true' bei PHP-String-Suchen fehl?

Warum schlägt der Vergleich von strpos() mit „=== true' bei PHP-String-Suchen fehl?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-16 18:15:11223Durchsuche

Why Does strpos() Comparison with `=== true` Fail in PHP String Searches?

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!

Stellungnahme:
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