PHP vytváří i dnes banda pitomců
Spousta lidí nadává na PHP kvůli naprostému nedostatku koncepce. Někteří lidé říkají, že je to věc minulosti, nedostatečného vzdělání jeho prvotních tvůrců, a že dnes je vše zcela jinak. Nemyslím si to.
Vezměte si třeba základní funkci str_replace(), ta má jako poslední parametr řetězec, v němž se hledají a zaměňují řetězce na první a druhé pozici. Funkce strpos() to má ovšem zcela naopak, první parametr je řetězec, v němž se hledá, a druhý parametr hledaný výsek. Podobný "bordel" (kdy si člověk nikdy není jistý, jaké pořadí parametrů která funkce právě akceptuje) je ve všech starších funkcích PHP, a to nejenom v pořadí parametrů. Problém je i v názvosloví funkcí, onomu str_replace() by daleko více odpovídalo str_pos(), které ovšem neexistuje.
Nekoncepčnost a naprostá zmatenost vývojářů PHP je ovšem vidět i dnes. Například podpora pro MySQL 4.1 a vyšší byla implementována jako zcela nová sada funkcí mysqli(), zcela ignorující existující mysql() řadu funkcí. Nová řada mysqli funkcí je de-facto identická té předchozí, jen má zcela opačné argumenty volání (a také je ji možno volat jako objekt). Takže místo mysql_query($query, $db) píšete nově a úžasně mysqli_query($db, $query).
A to není zdaleka celé. Databázového mišmaše je mnohem více. PHP obsahuje od verze 5.1 vestavěnou podporu pro SQLite, která se volá funkcemi sqlite(). Nicméně, zase to není tak docela pravda, tato podpora je funkční jen pro nestabilní a bugovou SQLite 2.8, takže pokud uvidíte hlášku "DATABASE SCHEMA HAS CHANGED", víte, že musíte použít SQLite 3.x.
Průser je ovšem v tom, že SQLite 3.0 má zase jinou sadu funkcí, přistupuje se k ní jen a pouze přes PDO objekty, tedy například new PDO("sqlite:$db"). Pokud tedy chcete, aby vaše aplikace používající SQLite nepadala až tak často, musíte ji celou zásadně a koncepčně přepsat, zapomenout na sqlite() funkce a používat PDO. Stejně tak musíte zásadně přepsat aplikaci používající MySQL 4.1 namísto MySQL 3.x / 4.0.
Kdyby vývojáři PHP nepostrádali mozek, dávno zavedou alias str_pos() pro funkci strpos(), naprogramují přístup k MySQL 3.x / 4.x / 5.x zcela transparentně, bez zavádění mysqli() funkcí, naprogramují podporu pro SQLite 3.x i pro sqlite() funkce, nikoliv jen pro PDO (ony sqlite funkce mimochodem vyžadují pro svoji funkčnost PDO knihovny!), prostě nebudou zjednodušovat život sobě, ale PHP programátorům.
Bohužel, hlavní cíl vývoje PHP je zřejmě získat jazyk s co možná největším počtem podivných funkcí na každou trivialitu, které nejsou vzájemně kompatibilní. Ať se na to dívám z jakéhokoliv pohledu, musím říci, že nejenom v minulosti, ale i dnes vytváří PHP banda naprostých pitomců.