Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názor ke zprávičce PHP mění oddělovač jmenných prostorů na zpětné lomítko

Miloslav Ponkrác aura:75
27. 10. 2008 22:45

Re: doufat je malo?

celé vlákno
ad 4) Bohužel PHP je dynamický jazyk, stejně jako třeba Python, nebo Ruby. To znamená, že čím méně možností kolizí uděláte, tím lépe, protože kolize se objevují postupně při natahování modulů.

Namespace není v podstatě nic jiného, než velmi silný antikolizní prostředek zabraňující kolizím jmen identifikátorů. K ničemu jinému namespaces neslouží. Bylo by proto trochu nelogické v takovém případě zavádět řešení, které by kolize identifikátorů opět zaváděly, protože se tím zhoršuje to, proč se namespace vůbec používají.

Nejlepší řešení je zkrátka bezkolizní syntaxe, což je to zvolili autoři PHP. Není třeba se drbat levou rukou za pravým uchem, a řešit kolize mezi funkcemi a třídami, když je možné zvolit bezkolizní syntaxi a nic neřešit. Lepší řešení IMHO nenajdete.

Jinak třída není dnes zakryta funkcí, to jste nepochopil syntaxi PHP. new foo() vytvoří novou instanci objektu foo a zavolá konstruktor, tedy metodu __construct(). Neexistuje žádná kolize, protože použijete-li identifikátor foo v kontextu, kde se očekává jméno třídy, jako třeba new foo(), nebo foo::metoda(), pak se zavolá metoda třídy foo. Zatímco volání foo() je jasně volání globální funkce a s žádnou třídou to nemá nic společného. Tím, že za něco zapíšete závorky, prostě voláte funkci, i kdyby existovala stejnojmenného něco jiného ne-funkce.