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.

nejen v DB driverech má PHP problém
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ů.