Ternární operátor
Školení, která pořádám
Na úvod se sluší poznamenat, že ternární operátor je jakýkoliv operátor, který pracuje se třemi operandy. V PHP a řadě dalších jazyků je ale takový operátor jediný, a proto se mu často říká prostě ternární. Operátor slouží k podmíněnému vyhodnocení výrazu.
<?php
// označení sudých a lichých řádků příslušnou třídou
echo "<tr class='" . ($i % 2 == 0 ? "even" : "odd") . "'>";
// bez použití ternárního operátoru
if ($i % 2 == 0) {
echo "<tr class='even'>";
} else {
echo "<tr class='odd'>";
}
?>
Někomu se použití ternárního operátoru zdá nepřehledné, podle mě kód naopak zpřehledňuje a zjednodušuje jeho správu. Jako se vším se to ale samozřejmě nesmí přehánět. Abych vždy na první pohled poznal, kde ternární operátor začíná a končí, uzavírám ho vždy do závorek – ono to většinou ani jinak nejde, protože má poměrně nízkou prioritu.
Diskuse
Jan Tichý:
Možná ještě jednodušeji a přehledněji by stačilo:
<?php
echo '<tr class="' . ($i % 2 ? 'odd' : 'even') . '">';
?>
BTW spousta lidí má ještě ve zvyku do závorek důsledně uzavírat i samotnou podmínku, což ale podle mne občas kód spíš znepřehledňuje:
<?php
echo '<tr class="' . (($i % 2) ? 'odd' : 'even') . '">';
?>
Já teda podmínku dost často dávám do závorky. On má ternár sice nízkou prioritu, ale radši dám o závorky víc než pak hledat chybu. Chyby v prioritě operátorů se tak těžce hledají...
Často taky tyhle výrazy rozepisuju na více řádek tímto způsobem:
<?php
$sql .= 'WHERE id';
$sql .= (is_null($id)
? ' IS NULL'
: '='.((int) $id)
);
?>
S tímto zápisem snad už nikomu nemůže ternární operátor připadat nepřehledný.
martin:
"S tímto zápisem snad už nikomu nemůže ternární operátor připadat nepřehledný."
...s timto zapisem navic ztratil ternarni operator temer vyznam :)
kozotoč:
<?php echo'<tr class="'.($i&1?'odd':'even').'">';?>
kozotoč:
ještě by se z toho dal vynechat středník (nebo pokud jsem si jistý, že nebudou zakázáný shorttags, použít
<?=...?>) a výsledek bude o pár nanosekund rychlejší než verze pana Vrány ;-) ale nevím, jak to bude s přehledností kódu...
omar:
Bez strednika ti to nikdy valit nebude..
Jan Švábík:
Bude:
<?='<tr class="'.(is_int($i/2)?'odd':'even'.'">' ?>
PrAvDíK:
<?php echo'<tr class="'.(is_int($i/2)?'odd':'even'.'">';?>
Besir:
Nevím čím to, záleží kde používáte, ale já třeba v Symfony při použití PHP template raději používám takovýto zápis
<tr class="
<?php echo $line %2 ? "even" : "odd"; ?>">
popřípadě, pokud vím že aplikace bude na serveru se short_tags on tak
<tr class="
<?= $line %2 ? "even" : "odd" ?>">
Myslím si že je dostatečně přehledné a použitelné
Diskuse je zrušena z důvodu spamu.