Forum und email

Összehasonlító operátorok

Az összehasonlító operátorok, mint nevük is sugallja, két érték összehasonlítására szolgálnak. Érdekesek lehetnek még a típus összehasonlítási táblázat, mivel mutat néhány példát különböző típusok összehasonlítására.

Összehasonlító operátorok
Példa Név Eredmény
$a == $b Egyenlő Igaz (TRUE), ha $a és $b értéke egyenlő
$a === $b Azonos Igaz (TRUE), ha $a és $b értéke egyenlő, és azonos típusúak (PHP 4-től)
$a != $b Nem egyenlő Igaz (TRUE), ha $a és $b értékei különbözők
$a <> $b Nem egyenlő Igaz (TRUE), ha $a és $b értékei különbözők
$a !== $b Nem azonos Igaz (TRUE), ha $a és $b értékei vagy típusai különbözők (csak PHP 4-től)
$a < $b Kisebb mint Igaz (TRUE), ha $a szigorúan kisebb, mint $b
$a > $b Nagyobb mint Igaz (TRUE), ha $a szigorúan nagyobb, mint $b
$a <= $b Kisebb, vagy egyenlő Igaz (TRUE), ha $a kisebb, vagy egyenlő, mint $b
$a >= $b Nagyobb, vagy egyenlő Igaz (TRUE), ha $a nagyobb, vagy egyenlő, mint $b

Ha egészet hasonlítasz stringgel, a string előbb számmá konvertálódik. Ha két számot reprezentáló stringet hasonlítasz össze, egész számokként lesznek összehasonlítva. Ezek a szabályok a switch utasítás esetén is érvényesek.

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

switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// nem éri el az "a"-t, mert egyezett 0-val
    
echo "a";
    break;
}
?>

Ha az operandusok típusa különböző, akkor az összehasonlítás az alábbi táblázat alapján történik (sorrendben).

Különböző típusú összehasonlítása
Első operandus típusa Második operandus típusa Eredmény
null vagy string string NULL konvertálása ""-é, numerikus vagy lexikális összehasonlítás
bool vagy null bármi Konvertálás bool-lá, FALSE < TRUE
objektum objektum A beépített osztályok definiálhatják saját összehasonlítási módot, különböző osztályok összehasonlíthatatlanok, azonos osztályok esetén a tulajdonságokat a tömbökhöz hasonló módon hasonlítja össze
string, erőforrás vagy numerikus string, erőforrás vagy numerikus A stringek és erőforr'sok átalakulnak számokká, majd a szokásos matematikai összehasonlítás
tömb tömb A kisebb elemszámú tömb a kisebb, ha az első operandus kulcsa nem létezik a második operandusban, akkor a tömbök összehasonlíthatatlanok, egyébként a értékről értékre történő összehasonlítás következik (lásd a lenti példát)
tömb bármi A tömb mindig nagyobb
objektum bármi Az objektum mindig nagyobb

Example#1 A standard tömbösszehasonlítás másolata

<?php
// A tömbök ilyen módon lesznek összehasonlítva, 
// standard összehasonlító operátorokkal
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// uncomparable
        
} elseif ($val $op2[$key]) {
            return -
1;
        } elseif (
$val $op2[$key]) {
            return 
1;
        }
    }
    return 
0// $op1 == $op2
}
?>

Lásd még: strcasecmp(), strcmp(), tömboperátorok, típusok.

A ternáris operátor

Egy másik feltételes operátor a "?:" (ternáris) operátor.

Example#2 Alapértelmezett érték beállítása

<?php
// Példa ternáris operátor használatára
$muvelet = (empty($_POST['muvelet'])) ? 'alap' $_POST['muvelet'];

// A fenti azonos az alábbi az if/else utasítással:
if (empty($_POST['muvelet'])) {
    
$muvelet 'alap';
} else {
    
$muvelet $_POST['muvelet'];
}
?>
A (expr1) ? (expr2) : (expr3) kifejezés kif2-t értékeli ki, ha kif1 értéke igaz (TRUE), és kif3-at, ha kif1 értéke hamis (FALSE).

Note: A ternáris operátor egy kifejezést alkot, ezért kiértékelése nem egy változót ad, hanem egy értéket. Ez azért fontos, mert ha egy változót referencia szerint akarsz átadni, és a return $var == 42 ? $a : $b; alakot használod, a referencia szerinti átadás nem fog működni és az újabb PHP verziók esetén figyelmeztetést is kapsz.