Rozdíl mezi ArrayHash a ArrayList?

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

Zdravím, může mi někdo objasnit jaký je rozdíl mezi ArrayHash a ArrayList? Tedy to že jedn dědí ze stdClass a druhý z nette\object vidím taky, myslím spíš jaký je v tom praktický rozdíl a na co použít to či ono… Díky

Filip Procházka
Moderator | 4668
+
0
-

ArrayList je seznam nějakých hodnot, kde na klíči nezáleží. ArrayHash se používá jako obálka na data z databáze. Představuje vždy jednotlivé řádky. Nebo taky hodnoty z formuláře.

List je seznam hodnot a Hash je asociativní pole (objekt), kde on sám představuje nějaký logický celek (řádek tabulky databáze).

Zkus si pohledat význam List a Hash na Google, kdyby ti to přišlo nejasné :) Bližšímu pochopení jiste pomůže i pohled do kódu.

duke
Člen | 650
+
+1
-
  • array … Hašovací tabulka jakožto speciální php konstrukce
  • ArrayHash … Hašovací tabulka jakožto php objekt
  • ArrayList … Pole jakožto php objekt (interně jde o emulaci pole hašovací tabulkou)

Přitom ArrayHash i ArrayList implementují rozhraní ArrayAccess, takže u nich lze používat notaci jako u array, tj. $foo[$bar]. U ArrayHash je možné přistupovat k prvkům hašovací tabulky také přes $foo->$bar.

O tom, co je to hašovací tabulka, si můžeš počíst např. na wikipedii: https://cs.wikipedia.org/…3%AD_tabulka

Co na co použít závisí na tvých požadavcích. Rozdíl mezi ArrayHash a array je krom možnosti přístupu k prvkům přes operátor -> také v tom, jak se hodnoty těchto typů předávají funkcím. Objekty ArrayHash (stejně jako ArrayList a jakéhokoli jiného objektu) se budou předávat odkazem, hodnoty typu array tzv. hodnotou (budou se automaticky kopírovat, pokud nepoužiješ operátor &).

Pokud tě nezajímají konkrétní klíče hodnot, ale zajímá tě jejich pořadí, pak může být vhodné použít ArrayList. ArrayList krom toho vyhazuje výjimky při použití nesprávného indexu.

Editoval duke (19. 11. 2011 3:28)

nanuqcz
Člen | 822
+
0
-

Díky za objasnění, taky jsem v tom měl trochu chaos :-)