Nowości z php.internals – operator trójargumentowy
Posted in php, programowanie on April 8th, 2011 by Wojciech Soczyński – 14 CommentsPewnie kilka razy w życiu każdy z nas zetknął się albo i też używał operatora trójargumentowego znanego też jako “ternary operator” bądź “operator Elvisa” (skrócona wersja w Groovym, ciekawe kto wymyślił tą nazwę). Jest to skrócona składnia dla prostego przypadku “if” i wygląda on mniej więcej tak:
$foo = 5; $bar = ($foo==5) ? "Foo równa się 5" : "Foo nie równa się 5"; echo $bar;
Najczęściej chyba operatora Elvisa używa się by sprawdzić czy jakaś zmienna jest ustawiona, czyli:
$bar = (isset($foo)) ? $foo : 666; echo $bar; //666
Ostatnio na grupie php.internals toczy się dyskusja czy aby nie uczynić drugiego przypadku domyślnym tj:
$bar = $foo ? $foo: 666; echo $bar; //666
Dzięki takiej zmianie jest krócej o te kilka uderzeń w klawiaturę by ustawić domyślna wartość jakiej zmiennej. Jest zarówno wielu zwolenników jak i przeciwników tej zmiany. Najważniejsze jednak jest, że Rasmus Lerdorf (BDFL php) uważa, że nie należy zmieniać już istniejącego zachowania ponieważ zrywa to wsteczną kompatybilność kodu. Wobec tego, zaproponowany został kolejny operator w postaci “??” mający to samo zastosowanie co poprzedni oprócz tego, że sprawdza tylko, czy jakaś wartość istnieje:
$value = $a[$key] ?? : 'Not set';
Niektórych też już poniosła fantazja i zaproponowali wersję:
$value = 'Not set' unless $a['key'];
Ciekaw jestem, czy często używacie operatora trójargumentowego, oraz jakie macie zdanie nt. ww. propozycji ?