ArrayHash a kontrola isset
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Ascaria
- Člen | 187
Zdravím,
pokud mám vytáhnuté hodnoty formuláře, který ma kontejnery atd., setkávám se s problémem, který mi dost znepřehledňuje kód – a tím jsou testy na isset.
Normální pole:
$a = Array('bagr' => Array('housle' => Array());
if(isset($a['bagr']['housle']['kytara']['lamplion'])) {} // false v pořádku
ArrayHash:
$a = ArrayHash('bagr' => ArrayHash('housle' => ArrayHash()); // pseudozadání
if(isset($a['bagr']['housle']['kytara']['lamplion'])) {} // Notice Undefined property: Nette\ArrayHash::$kytara
/*
File: .../web/libs/Nette/common/ArrayHash.php Line: 91
84: /**
85: * Returns a item.
86: * @param mixed
87: * @return mixed
88: */
89: public function offsetGet($key)
90: {
91: return $this->$key;
92: }
*/
Nebylo by dobré toto chování nějak sjednotit? V nynějším stavu mě to nutí dělat nepřehlednosti typu:
if(
isset($a['bagr'])
&& isset($a['bagr']['housle'])
&& isset($a['bagr']['housle']['kytara'])
&& isset($a['bagr']['housle']['kytara']['lamplion'])
) {}
Nedá se to chytat ani exceptionama, navrhoval bych, aby to házelo třeba exception co jde chytit.
edit: Koukám že, nejnovější Nette má možnost to vrátit jako pole, tak si to tak asi taky implementuju do staršího Nette 2.0.
Editoval Ascaria (29. 3. 2012 12:29)