V minulém zápisku o TDD jsem zmínil, že v práci začínáme s novým projektem a že jako implementační prostředí bylo tak nějak automaticky vybráno PHP (protože s ním má rámcovou zkušenost většina lidí u nás ve firmě). Extra fanda PHP jsem nikdy nebyl, ale pár větších projektů už jsem v tom dělal a vždycky to nějak šlo, takže i tentokrát jsem zpočátku neměl námitky. Moje trpělivost ale právě přetekla – ztratil jsem už tolik hodin zbytečně, že mě PHP spíš brzdí než aby mi pomáhalo udělat práci včas – a s takovým nástroje končím. Během posledních dní mě potrápily především následující věci:
- S PHP až příliš často platím daň za to, že můj oblíbený operační systém je Windows a ne Linux nebo jiný Unixoid. V minulosti jsem narazil na několik Windows-specifických bugů (nejšťavnatější byl ten, kdy po upgradu setinkové verze PHP přestala fungovat konstanta PHP_SELF a okamžitě tak spadlo několik mých webů), pro některé verze PHP se občas nedají sehnat Windows binárky doplňků třetích stran (třeba non-thread safe binárka XDebugu), dokumentace občas používá konvence z Linuxu nepřenositelné na Windows atd. Prostě život PHP vývojáře na Windows (a nedej bože, pokud používá IIS!) je občas pořádně komplikovaný.
- Debugging … prakticky neexistuje. PDT (PHP Development Tools postavený nad Eclipse) je sice pro psaní kódu poměrně pěkný nástroj, ale i v roce 2008 mu ladění v základu chybí. Kdo s PHP nemusí pracovat, se asi jen soucitně usmívá, já jsem ale nefalšovaně trpěl a debuggování se mi nepodařilo rozchodit ani po opravdu slušném úsilí. Stručně řečeno, Zend Debugger byl nepoužitelný kvůli najednou dlouhým časům odezvy PHP skriptů (z 0.05 sekundy to vylítlo někam nad 10 sekund; nepodařilo se mi odhalit proč) a pro XDebug se mi nepodařilo sehnat Windows binárku pro non-thread safe verzi PHP (viz předchozí bod). Takže mi zbylo jen var_dump() – to bylo hodně smutné.
- Pomyslnou poslední kapkou ale byla chybovost knihoven pro práci s XML – a XML je pro můj současný projekt naprosto klíčové. Když jsem zjistil, že základní načtení XML stringu do DomDocumentu závisí na tom, jaké konce řádků se v XML používají (Windows nebo Unix), věděl jsem, že tudy opravdu ne, přátelé. Opravdu někdo knihovnu libxml testoval?
S PHP už jsem toho vydržel hodně, ale bugy si do vlastních aplikací tahat nenechám. Aspoň pro tento projekt tedy prchám k .NETu a rád za sebou nechám i další drobnosti, které mi vadily, i když bych jen kvůli nim bych na PHP zcela nezanevřel:
- PHP jako jazyk není nic moc
- Bordel ve jménech základních funkcí
- Schizofrenie mezi objektovým a procedurálním programováním
- Relativně slabá podpora v IDE, ačkoliv PDT se s tím v poslední době snaží něco udělat (Zend Studio je dobré, ale drahé)
- Osobně jsem příznivec staticky typovaných jazyků, komfort v IDE umožněný design-time znalostí typů u mě převáží výhody jazyků dynamických (v tomto ohledu se mi moc líbí C# 3.0, který dynamicky vypadá, ale přitom není)
- PHP manuál je na první pohled sympaticky jednoduchý, ale ne vždy se v něm lze dočíst vše podstatné. MSDN je pravý opak – objem informací na první pohled zaskočí, ale zase se celkem dá spolehnout na to, že požadovaná informace tam někde bude. Kombinace Google Custom Search a MSDN funguje.
- Při různých interakcích s jinými vývojáři z PHP komunity jsem často měl pocit, že jaksi nejsme na stejné vlně. Třeba autor PHPUnit celkem zarytě odmítal, že by pro spuštění testů mohlo existovat něco lepšího než příkazová řádka (a vůbec mu nevadilo, že z TDD mantry „red, green, refactor“ se v jeho pojetí stává „gray, gray, refactor“). Nebo třeba komentář pod tímto bug reportem: http://bugs.php.net/bug.php?… mi vyloženě připadá jako WTF.
PHP mělo i své světlé stránky, jako jednoduchost na naučení nebo Zend Framework, ale minimálně na svůj současný projekt si od něj rád odpočinu.
Připoměl jsi mi mé poznámky z bojiště s XML. Hele, programovat v ASP.NET umí každej, ale psát v PHP, to je teprve umění, to chce trpělivost! :-))
„Thank you for your interest in PHP.“