Keine Cache-Version

Caching deaktiviert Standardeinstellung für diese Seite:aktiviert (code LNG204)
Wenn die Anzeige zu langsam ist, können Sie den Benutzermodus deaktivieren, um die zwischengespeicherte Version anzuzeigen.

Rechercher une fonction PHP

Vergleichs-Operatoren

Vergleichs-Operatoren erlauben es – wie der Name schon sagt – zwei Werte zu vergleichen. Wenn Sie an Beispielen verschiedener auf Typen bezogener Vergleiche interessiert sind, können Sie sich die PHP Typvergleich-Tabellen anschauen.

Vergleichsoperatoren
Beispiel Name Ergebnis
$a == $b Gleich Gibt TRUE zurück, wenn nach der Typ-Jonglage $a gleich $b ist.
$a === $b Identisch Gibt TRUE zurück, wenn $a gleich $b ist, und beide denselben Typ haben.
$a != $b Ungleich Gibt TRUE zurück, wenn nach der Typ-Jonglage $a nicht gleich $b ist.
$a <> $b Ungleich Gibt TRUE zurück, wenn nach der Typ-Jonglage $a nicht gleich $b ist.
$a !== $b Nicht identisch Gibt TRUE zurück, wenn $a nicht gleich $b ist, oder wenn beide nicht denselben Typ haben.
$a < $b Kleiner als Gibt TRUE zurück, wenn $a kleiner als $b ist.
$a > $b Größer als Gibt TRUE zurück, wenn $a größer als $b ist.
$a <= $b Kleiner gleich Gibt TRUE zurück, wenn $a kleiner oder gleich $b ist.
$a >= $b Größer Gleich Gibt TRUE zurück, wenn $a größer oder gleich $b ist.
$a <=> $b Raumschiff Eine Ganzzahl (integer) kleiner als, gleich oder größer als 0, wenn $a entsprechend kleiner als, gleich oder größer als $b ist. Verfügbar von PHP 7 an.

Wenn eine Zahl mit einer Zeichenkette verglichen wird, oder der Vergleich numerische Zeichenketten einschließt, dann wird jede Zeichenkette in eine Zahl umgewandelt, und der Vergleich wird numerisch durchgeführt. Diese Regeln gelten ebenfalls für die switch Anweisung. Die Typumwandlung wird nicht durchgeführt, wenn der Vergleichsoperator === oder !== ist, da diese den Typ als auch den Wert vergleichen.

<?php
var_dump
(== "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// wird niemals erreicht, weil "a" bereits mit 0 übereinstimmte
    
echo "a";
    break;
}
?>
<?php  
// Ganzzahlen
echo <=> 1// 0
echo <=> 2// -1
echo <=> 1// 1
 
// Fließkommazahlen
echo 1.5 <=> 1.5// 0
echo 1.5 <=> 2.5// -1
echo 2.5 <=> 1.5// 1
 
// Zeichenketten
echo "a" <=> "a"// 0
echo "a" <=> "b"// -1
echo "b" <=> "a"// 1
 
echo "a" <=> "aa"// -1
echo "zz" <=> "aa"// 1
 
// Arrays
echo [] <=> []; // 0
echo [123] <=> [123]; // 0
echo [123] <=> []; // 1
echo [123] <=> [121]; // 1
echo [123] <=> [124]; // -1
 
// Objekte
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo 
$a <=> $b// 0
 
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo 
$a <=> $b// -1
 
$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo 
$a <=> $b// 1
 
// nicht nur die Werte werden verglichen; die Schlüssel müssen übereinstimmen
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo 
$a <=> $b// 1

?>

Für die verschiedenen Typen wird der Vergleich gemäß der folgenden Tabelle durchgeführt (in der angegebenen Reihenfolge).

Vergleich mit verschiedenen Typen
Typ des 1. Operanden Typ des 2. Operanden Ergebnis
null oder string string Umwandlung von NULL nach "", dann numerischer oder lexikalischer Vergleich
bool oder null anything Umwandlung beider Werte nach bool, dann FALSE < TRUE
object object Eingebaute Klassen können eigene Vergleichsregeln definieren; unterschiedliche Klassen können nicht verglichen werden; für dieselben Klassen siehe Objektvergleiche
string, resource oder number string, resource oder number Umwandlung von Zeichenketten und Ressourcen in Zahlen, dann numerischer Vergleich
array array Ein Array mit weniger Elementen ist kleiner; wird ein Schlüssel vom ersten Operanden nicht im zweiten gefunden, dann sind die Arrays nicht vergleichbar; andernfalls wird Element für Element verglichen (siehe folgendes Beispiel)
object anything object ist immer größer
array anything array ist immer größer

Beispiel #1 Boolesche und Null Vergleiche

<?php
// Boolesche Werte und NULL werden immer als Boolesche Werte verglichen
var_dump(== TRUE);  // TRUE - dasselbe wie (bool)1 == TRUE
var_dump(== FALSE); // TRUE - dasselbe wie (bool)0 == FALSE
var_dump(100 TRUE); // FALSE - dasselbe wie (bool)100 < TRUE
var_dump(-10 FALSE);// FALSE - dasselbe wie (bool)-10 < FALSE
var_dump(min(-100, -10NULL10100)); // NULL - (bool)NULL < (bool)-100 ist FALSE < TRUE
?>

Beispiel #2 Umschreibung von Standard-Array-Vergleichen

<?php
// Arrays werden mit den normalen Vergleichsoperatoren wie folgt verglichen
function standard_array_compare($op1$op2)
{
    if (
count($op1) < count($op2)) {
        return -
1// $op1 < $op2
    
} elseif (count($op1) > count($op2)) {
        return 
1// $op1 > $op2
    
}
    foreach (
$op1 as $key => $val) {
        if (!
array_key_exists($key$op2)) {
            return 
null// nicht vergleichbar
        
} elseif ($val $op2[$key]) {
            return -
1;
        } elseif (
$val $op2[$key]) {
            return 
1;
        }
    }
    return 
0// $op1 == $op2
}
?>

Siehe auch strcasecmp(), strcmp(), Array-Operatoren, und den Handbuchabschnitt über Typen.

Warnung

Vergleich von Fließkommazahlen

Aufgrund der Art wie Fließkommazahlen (float) intern dargestellt werden, sollten zwei Fließkommazahlen nicht auf Gleichheit getestet werden.

Weitere Informationen sind der Dokumantation von float zu entnehmen.

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Ternärer Operator

Ein weiterer Vergleichs-Operator ist der "?:" (oder ternäre) Operator.

Beispiel #3 Zuweisen eines Standardwerts

<?php
// Beispielanwendung für den ternären Operator
$action = (empty($_POST['action'])) ? 'standard' $_POST['action'];

// Obiges ist mit dieser if/else-Anweisung identisch
if (empty($_POST['action'])) {
    
$action 'standard';
} else {
    
$action $_POST['action'];
}
?>
Der Ausdruck (ausdr1) ? (ausdr2) : (ausdr3) wird als ausdr2 ausgewertet, wenn ausdr1 als TRUE ausgewertet wird, und als ausdr3, wenn ausdr1 als FALSE ausgewertet wird.

Seit PHP 5.3 kann man beim ternären Operator den mittleren Teil weglassen. Der Ausdruck (ausdr1) ?: (ausdr3) gibt ausdr1 zurück, wenn ausdr1 als TRUE ausgewertet wird, und andernfalls ausdr3.

Hinweis: Es ist zu beachten, das die ternäre Operation ein Ausdruck ist, und nicht als Variable, sondern als Wert eines Ausdrucks ausgewertet wird. Dies ist unbedingt zu berücksichtigen, wenn eine Variable per Referenz zurückgegeben werden soll. Die Anweisung return $var == 42 ? $a : $b; in einer Funktion, die per Referenz zurückgibt, wird daher nicht funktionieren, und eine Warnung erzeugen.

Hinweis:

Die Verschachtelung von ternären Ausdrücken wird nicht empfohlen. Das Verhalten von PHP, wenn mehrere ternäre Operatoren in einer einzelnen Anweisung verwendet werden, ist ungewöhnlich:

Beispiel #4 Ungewöhnliches Verhalten des ternären Operators

<?php
// auf den ersten Blick scheint das folgende 'true' auszugeben
echo (true?'true':false?'t':'f');

// allerdings wird tatsächlich 't' ausgegeben
// das kommt daher, dass ternäre Ausdrücke von links nach rechts ausgewertet werden

// das Folgende ist eine augenfälligere Variante desselben Codes wie oben
echo ((true 'true' false) ? 't' 'f');

// hier kann man sehen, dass der erste Ausdruck zu 'true' ausgewertet wird,
// was wiederum zu (bool)true ausgewertet wird, und daher wird der Wahr-Zweig
// des zweiten ternären Ausdrucks zurückgegeben.
?>

Erste Seite von PHP-Handbuch Inhaltsverzeichnis Haut

Null-Coalescing-Operator

Weiterhin gibt es den "??" (oder Null-Coalescing) Operator, verfügbar von PHP 7 an.

Beispiel #5 Zuweisung eines Standardwerts

<?php
// Example usage for: Null Coalesce Operator
$action $_POST['action'] ?? 'standard';

// Obiges ist mit dieser if/else-Anweisung identisch
if (isset($_POST['action'])) {
    
$action $_POST['action'];
} else {
    
$action 'standard';
}

?>
Der Ausdruck (ausdr1) ?? (ausdr2) wird zu ausdr2 ausgewertet, wenn ausdr1 NULL ist, und zu ausdr1 andernfalls.

Insbesondere gibt dieser Operator keinen Hinweis aus, wenn der Wert auf der linken Seite nicht existiert, genau wie isset(). Dies ist besonders für Array-Schlüssel nützlich.

Hinweis: Es ist zu beachten, das die Null-Coalescing-Operation ein Ausdruck ist, und nicht als Variable, sondern als Wert eines Ausdrucks ausgewertet wird. Dies ist unbedingt zu berücksichtigen, wenn eine Variable per Referenz zurückgegeben werden soll. Die Anweisung return $foo ?? $bar; in einer Funktion, die per Referenz zurückgibt, wird daher nicht funktionieren, und eine Warnung erzeugen.

Hinweis:

Es ist zu beachten, dass der Null-Coalescing-Operator einfach verschachtelt werden kann:

Beispiel #6 Verschachtelung des Null-Coalescing-Operator

<?php

$foo 
null;
$bar null;
$baz 1;
$qux 2;

echo 
$foo ?? $bar ?? $baz ?? $qux// gibt 1 aus

?>

Finde eine PHP-Funktion

Deutsche Übersetzung

Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.

Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.

Vielen Dank im Voraus.

Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-language.operators.comparison.html

Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.

Referenzen

  1. Zeigen Sie - html-Dokument Sprache des Dokuments:fr Manuel PHP : http://php.net

Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.

Inhaltsverzeichnis Haut