Začátečnická dotaz: zjednodušení isset(…)?…:něco
- bojovyletoun
- Člen | 667
Ahoj, sice už v php programuji pár let, ale má už PHP po těch letech existence nějaký zjednošený zápis pro toto?
$petr=isset($opt['u']) ? $opt['u'] : 'nekdo';
zde mám pár zápisů, které tuto funkčnost umí, ale nevím zda jsou
100%:
Zajímá mě váš názor na daný zápis, který je nejlepší, s čím jsou
problémy (co třeba properties a offsetExists), zda existuje jednodušší
řešení.
function y(&$tested, $default=null){
return isset($tested) ? $tested : $default;
}
\Nette\Diagnostics\Debugger::$scream = 1;
$arr = array(/*def*/);
$res2 = ($t2 = &$arr[2]) ? $t2 : -22; // works
$res3 = ($t3 = @$arr[3]) ? $t3 : -33; // in strict pops notice
$res4 = y($arr[4], -44); //works
\Nette\Diagnostics\Debugger::barDump(get_defined_vars());
Prozatím u mě vede y()
Editoval bojovyletoun (28. 11. 2011 23:59)
- duke
- Člen | 650
bojovyletoun napsal(a):
$petr=isset($opt['u']) ? $opt['u'] : 'nekdo';
Pokud jde o prvek pole, můžeš použít pomůcku přímo z frameworku:
$petr = Nette\Utils\Arrays::get($opt, 'u', 'nekdo');
… přičemž tato funkce podporuje i vícerozměrná pole (stačí
v druhém parametru uvést pole klíčů).
Nicméně přes isset a operátor ?: to bude o něco rychlejší a zas tak
nečitelné to také není.
- Nox
- Člen | 378
Ad ?: – podle mě nejde použít
Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to
TRUE, and expr3 otherwise.
pokud použiješ isset(), nejspíš ti to místo hodnoty vrátí
BOOL a ne $opt[‚u‘]
a pokud ne, může to zas házet chybu o neexistující proměnné/klíči
Myslim že to moc rychleji zapsat nejde …
Ty další zápisy jsou podle mě dost nepřehledný a skoro o vůbec nic úspornější. Jak se říká – kód se častěji čte než zapisuje, tak to radši napiš normálně. Stejně sice ten standardní zápis má o pár znaků víc, ale zase ty tam máš různý funkce a závorky a @ a & … takže používání různých shiftů, alt gr nebo něco, navíc se na to musíš víc soustředit
Pokud ti fakt tak moc jde o těch pár znaků, napiš si v IDE code template
Editoval Nox (29. 11. 2011 8:27)