Hlavní navigace

Názor ke článku Je PHP jazyk pro amatéry? od Miloslav Ponkrác - [68] No to je trochu omyl. Ono totiž...

  • 6. 1. 2009 1:08

    Miloslav Ponkrác (neregistrovaný)

    [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