PHP: if-then-else a ternárny operátor

Tak ako v každom programovacom jazyku tak aj v PHP poznáme podmienky.

Syntax klasického zápisu if-then-else v PHP:

$p = 5;
if ($p > 2)
{
	$pVacsieAkoDva = true; // Podmienka bola splnená
}
else
{
	$pVacsieAkoDva = false; // Podmienka nebola splnená
}

Syntax ternárneho operátora v PHP:

$p = 5;
$pVacsieAkoDva = ($p > 2) ? true : flase ; // premennú nastaví na true

Klasický zápis if-then-else podmienky je jednoduchý a prehľadný. Ale čo ak nemáme priestor na to aby sme mohli takýto zápis použiť?

Predstavme si príklad kde máme asociované pole ako napríklad toto:

$array1 = array('a'=>1,'b'=>2,'c'=>3);

... a teraz toto pole potrebujeme prepísať do iného asociovaného poľa a to tak, že hodnota z poľa $array1 ktorá má kľúč malé písmeno a bude priradená k hodnote poľa $array2 ktorá bude mať kľúč veľké písmeno A. Takto:

$array2 = array(
		'A' => $array1['a'],
		'B' => $array1['b']
	);

... toto bude fungovať do doby pokiaľ sa nepokúsime spraviť toto:

$array2['D'] = $array1['d'];

... toto priradenie v našom prípade zlyhá a bude vypísaná notifikácia o nedefinovanom indexe. Tento kód môžeme prepísať takto:

if (array_key_exists('d',$array1))
{
	$array2['D'] = $array1['d'];
}
else
{
	$array2['D'] = '';
}

Krátka abeceda má však 26 znakov. Táto podmienka zabrala 8 riadkov kódu, takže pri takomto ošetrení bude mať kód 208 riadkov čo na nejaké priradenie do poľa je trocha veľa. Tu sa dá však veľmi pekne použiť ternárny operátor.

Príklad zjednodušenia predchádzajúceho príkladu s použitím ternárneho operátora:

$array2 = array(
		'A' => array_key_exists('a',$array1) ? $array1['a'] : '',
		'B' => array_key_exists('b',$array1) ? $array1['b'] : '',
		'C' => array_key_exists('c',$array1) ? $array1['c'] : '',
		'D' => array_key_exists('d',$array1) ? $array1['d'] : ''
	);

Ako vidíme ternárny operátor nám daný k skráti avšak to môže mať za dôsledok, že kód prestane byť jednoducho čitateľný. Pri takomto jednoduchom príklade sa to nemusí javiť ale pri väčších kódoch kde podmienky môže mať rôznu dĺžku treba obozretne voliť situácie kde použijete ternárny operátor a kde klasický zápis podmienky.

Ďalšie zaujímavé použitia ternárneho operátora

Tu je pár príkladom použitia ternátneho operátora od jednoduchých až po pokročilé:

$message = 'Ahoj '.($user->is_logged_in() ? $user->get('first_name') : 'návštevník');
$message = 'Ahoj '.($user->get('first_name') ?: 'návštevník');
echo 'Podľa dosiahnutých bodov ste ' . ($body > 10 ? 'profík' : 'začiatočník') . '.';
// vráti počet dní v danom mesiaci
$days = ($month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year %400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31));
Značky: