Heim >Backend-Entwicklung >PHP-Tutorial >Warum kann der Vergleich von „strpos()' mit „true' das Auftreten von Zeichenfolgen in PHP nicht erkennen?

Warum kann der Vergleich von „strpos()' mit „true' das Auftreten von Zeichenfolgen in PHP nicht erkennen?

Susan Sarandon
Susan SarandonOriginal
2024-12-10 08:29:10400Durchsuche

Why Does Comparing `strpos()` to `true` Fail to Detect String Occurrences in PHP?

Falsche Interpretation des strikten Vergleichs von strpos() mit true

Beim Versuch festzustellen, ob eine Zeichenfolge ein unerwünschtes Element enthält, können Programmierer auf unerwartete Ergebnisse stoßen, wenn sie strpos() direkt verwenden Gleichstellungsvergleiche.

Bedenken Sie dies Szenario:

$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 />';
    }
}

Interessanterweise gibt dieser Code „Akzeptabel!“ aus. für jedes Element in $inacceptables, obwohl https in $link vorhanden ist. Dieses scheinbar paradoxe Verhalten ergibt sich aus der Natur von strpos() selbst.

Ein Blick in die offizielle PHP-Dokumentation verdeutlicht den wahren Zweck der Funktion:

Gibt die numerische Position des ersten Vorkommens von Needle in zurück Heuhaufen-Zeichenfolge.

Wenn Sie also das Ergebnis von strpos() direkt mit true vergleichen, überprüfen Sie effektiv die Existenz von unerwünschtes Element in $link, nicht seine Gleichheit mit true.

Um dieses Problem zu beheben, besteht ein geeigneterer Ansatz darin, !== false in der if-Anweisung zu verwenden:

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

Auf diese Weise So beurteilen Sie richtig, ob strpos() das Vorhandensein des unerwünschten Elements erkannt hat, was zum gewünschten Ergebnis führt.

Das obige ist der detaillierte Inhalt vonWarum kann der Vergleich von „strpos()' mit „true' das Auftreten von Zeichenfolgen in PHP nicht erkennen?. 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