Heim >Backend-Entwicklung >PHP-Tutorial >Warum führt die strikte Gleichheit mit „strpos()' in PHP oft zu unerwarteten Ergebnissen?

Warum führt die strikte Gleichheit mit „strpos()' in PHP oft zu unerwarteten Ergebnissen?

Susan Sarandon
Susan SarandonOriginal
2024-12-16 15:18:20198Durchsuche

Why Does Strict Equality with `strpos()` in PHP Often Produce Unexpected Results?

Unzuverlässiger Boolescher Vergleich in PHP: Die Macken von strpos() verstehen

In PHP ist die Funktion strpos() ein grundlegendes Werkzeug für Suche innerhalb von Zeichenfolgen. Eine häufige Falle, auf die Programmierer stoßen, besteht jedoch darin, das Ergebnis von strpos() unter Verwendung des strikten Gleichheitsoperators (===) mit true zu vergleichen.

Das Problem:

Betrachten Sie den folgenden 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 />';
    }
}

Dieser Code versucht zu überprüfen, ob die $link-URL eine der in aufgeführten Zeichenfolgen enthält $inakzeptabel. Es wird jedoch unerwartet „Akzeptabel!“ ausgegeben. für alle Fälle, auch wenn „https:“ in $link vorhanden ist.

Die Lösung:

Die Wurzel des Problems liegt im Verhalten von PHP beim Vergleich des Ergebnisses von strpos(). Standardmäßig gibt strpos() eine Ganzzahl zurück, die die Position des ersten Vorkommens des Teilstrings innerhalb des Strings darstellt. Wenn die Teilzeichenfolge nicht gefunden wird, wird „false“ zurückgegeben.

Wenn Sie im Codeausschnitt strpos() mit „true“ vergleichen, prüfen Sie im Wesentlichen, ob das Ergebnis eine andere Zahl als Null ist. Da die Funktion immer eine Zahl zurückgibt, wenn sie eine Übereinstimmung findet, gibt dieser Vergleich immer „true“ zurück, was fälschlicherweise auf das Vorhandensein einer Teilzeichenfolge hinweist.

Um dieses Problem zu beheben, verwenden Sie stattdessen den strikten Ungleichheitsoperator (!==). prüft auf Ungleichheit. Dadurch wird sichergestellt, dass der Vergleich mit „Falsch“ durchgeführt wird, wenn die Teilzeichenfolge nicht gefunden wird.

// ...
if (strpos($link, $unacceptable) !== false) {

Durch Befolgen dieser einfachen Änderung erkennt das Code-Snippet korrekt „Inakzeptabel gefunden“ und gibt es aus, wenn die $link-URL eine solche enthält der verbotenen Teilzeichenfolgen.

Das obige ist der detaillierte Inhalt vonWarum führt die strikte Gleichheit mit „strpos()' in PHP oft zu unerwarteten Ergebnissen?. 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