Začátečnická dotaz: zjednodušení isset(…)?…:něco

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bojovyletoun
Člen | 667
+
0
-

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
+
0
-

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
+
0
-

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)