PHP kézikönyv
Előző | 15. Fejezet. Operátorok | Következő

# Ö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.

Táblázat 15-4. Ö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(0 == "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).

Táblázat 15-5. 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

Példa 15-2. 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.

Példa 15-3. 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`).

> Megjegyzés: 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.

Előző | Tartalom | Következő
Bitorientált operátorok | Fel | Hibakezelő operátorok