Odpovídáte na názor ke článku Je PHP jazyk pro amatéry?.
[68] No to je trochu omyl. Ono totiž v každém dynamicky typovaném jazyce – PHP nevyjímaje – je všechno hašovací tabulka (tedy asociativní pole). Co myslíte, že se stane, když napíšete:
$i = 3;
No stane se to, že se v hašovací tabulce globálních proměnných najde proměnná s názvem i a ta se použije. Tedy vnitřně PHP udělá tohle:
$GLOBALS['i'] = 3;
Takže rada nepoužívat asociativní pole v PHP je bláhová. Všechno v PHP – proměnné, objekty, pole, funkce – všechno je vnitřně prohledáváno jako asociativní pole přes hašovací tabulku. Všechny názvy (identifikátory) čehokoli uvnitř PHP je prohledáváno hašovací tabulkou, tedy úplně stejně, jako byste pracoval s asociativním polem.
A tak se to děje v každém dynamicky typovaném jazyce, v PHP, v Pythonu, Ruby, Groovy, Smalltalku, LISPu, Scheme, Perlu, ... – ve všech se používá hašovací tabulka pro prohledávání proměnných, polí, objektů, všeho. Říkají se tomu prostory jmen (namespaces).
A ono je to velice efektivní, protože je mnoho času věnováno tomu, aby hašovací tabulka byla velmi efektivní a je prováděno mnoho testů. Například ve zdrojáku PHP najdete hašovací funkci pro PHP řetězce:
hash = 5381;
for (i=0; i<len; ++i)
hash = 33 * hash + string[i];
Byla hodně testovaná a podrobena mnoha statistickým testům, než došla do tohoto tvaru. Navíc se v každé verzi ladí i uložené a prohledávání hašovacích tabulek.
Takže nepoužívat pole je bláhové, protože tím nic neurychlíte.
Miloslav Ponkrác
Autor je student Fakulty informačních technologií VUT v Brně. Současně pracuje ve firmě LifeWeb (http://www.lifeweb.cz) jako hlavní vývojář.