Ö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.
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).
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'];
}
?>
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.