Neměl by AnnotationParser vracet pole místo ArrayObject?

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

V dokumentaci je k anotacím uvedeno tohle:

@User(loggedIn, role=Admin)
obsahuje asociativní pole array(‚loggedIn‘, ‚role‘ ⇒ ‚Admin‘)

AnnotationParser ale ve skutečnosti (Nette 2.0.8) vrátí objekt ArrayObject. Je k tomu nějaký důvod?

enumag
Člen | 2118
+
0
-

ArrayObject? Myslel jsem že to vrací ArrayHash… jinak v dokumentaci je chybka, o tom žádná – fixneš ji?

Šaman
Člen | 2666
+
0
-

Když jsme u toho, jedna taková lamerská otázka:
Jaký je rozdíl mezi ArrayObject a ArrayHash?
Většinou používám ArrayObject, pokud chci pole ve kterém je možné přistupovat k prvkům šipkama.

enumag
Člen | 2118
+
0
-

Odpověď neznám, ale z kódu ArrayHash jsem vydedukoval, že se jedná o třídu od které mají těžit další třídy které chtějí sjednotit chování $obj->property a $obj['property']. ArrayObject dělá něco jinýho, uvaž volání $obj['property'] = $value:

  • $obj instanceof ArrayObject ⇒ prostě uloží $value do nějaké vnitřní struktury
  • $obj instanceof ArrayHash ⇒ zavolá $obj->property = $value, což často vede na __set, záleží na implementaci

Pak jsem narazil ještě na ArrayList, což je zřejmě pole kde indexy mohou být jen číselné hodnoty a nemá díry, když odebereš něco zprostředka tak se zbytek posune. Aby toho nebylo málo tak tu máme ještě Spl datové struktury.

uestla
Backer | 799
+
0
-

ArrayHash by měl sloužit jako hash tabulka, čili klíč ⇒ hodnota,
pročež narozdíl od ArrayListu neumožňuje vložení prvku nakonec
pomocí $arrayHash[] = 'item'.

Osobně ArrayHash používám mj. když chci šetřit paměť a nepředávat si
skrz kód nativní pole a přemýšlet o referencích, předám prostě
instanci ArrayHash