Update: V návaznosti na tento článek vznikl další – Je Java jako Linux nebo jako Windows?
Update: Abych nezůstal u teorie a subjektivních hodnocení PHP, přidám ukázku jednoho webu napsaného v PHP – a to hned web zabývající se programováním.
Update: V posledním (aspoň doufám) článku na toto téma vysvětluji jednotlivé body ze seznamu nevýhod.
Na webu je mnoho flejmů, zda je PHP lepší / horší než Java a .NET atd. Ostatně, nejjednodušší způsob, jak rozpoutat flejm, je zajít na hodně čtený blog nějakého PHPčkáře a zeptat se místních, že jste nováček a jestli je PHP lepší než Java. Mimojiné se na tom otestuje složení čtenářů – tj. nakolik jsou zastoupeni čistokrevní PHPčkáři s klapkami na očích, kteří nemají šajna o MVC, O/R a kolikrát ani pořádném OOP návrhu.
Nicméně nenašel jsem (pravda, zas tolik jsem nehledal) nějakou pořádnou moderovanou diskusi, případně článek, o výhodách a nevýhodách PHP.
//Update:// Našel jsem celkem dobrý článek na http://spyced.blogspot.com/…p-sucks.html. Sice je poněkud starší, ale jádro pudla zůstává. Je o dost ostřejší a než tento můj článek, takže PHPčkáři – bacha! :-) A všimněte si, že J2EE autor označuje za neelegantní stejně jako PHP.
Trochu se porozhlížím, kamže půjdu pracovat na fulltime. Do toho mě oslovil bývalý spolužák, že prý si mě všimnul na přednáškách Seznam.cz a že jejich firma naléhavě hledá programátory PHP a jestli bych k nim nešel. Já na to, jestli dělají v Javě, a že prý ano, ale hledají PHP programátory. Slíbil jsem, že se tedy ozvu jeho šéfovi a pokecáme. Pak jsem na to ale pozapomněl a šéf se ozval sám (asi hledají opravdu naléhavě :-)
Popravdě jsem mu vyložil, že PHP umím dobře, prakticky do detailů, no což to budu opisovat – zde je má odpověď:
Dobrý den,
Vaše nabídka mě zaujala. Shrnu svoji situaci:
V PHP vyvíjím (komerčně) už několik let. Možná právě proto mě to ale velice silně táhne k Javě a J2EE […]. Dále mám zkušenosti s [… … …] .
Kolega XY mi už také psal, zvažoval jsem, že se ozvu, ale říkal, že váš J2EE tým je asi spíše plný.
Mohl bych tedy pracovat jak jako vývojář PHP, tak J2EE, nicméne druhé o mnoho raději […]. Nabídku pracovního místa už mám, proto by mě zajímaly další podmínky – můžeme je případně probrat po telefonu.
V příloze posílám své CV, pokud by bylo třeba.
S pozdravem Ing. Ondřej Žižka
Asi půl hodinu na to se mi šéfík ozval po telefonu a domluvili jsme si schůzku. Na té jsem se dozvěděl, že získali kontrakt od firmy ABC, jíž dělají pokladní systém v J2EE a registrační web v PHP. A že na PHPkové weby mají svůj PHP framework (a v tu chvíli jsem si říkal – ajejej, další „svůj PHP framework…“) a že jej chtějí rozvinout. Ptal jsem se, co umí, jak funguje a oč jej chtějí rozvinout. A dozvěděl jsem se, že:
Potom se stočila řeč na to, jestli bych mohl dělat Java juniora, a později, proč bych nemohl, respektive proč chtějí vyvíjet v PHP a poč vyvíjet framework pro PHP, který:
a nakonec – a to především –
No diskuse to byla těžká, protože šéfík (nic proti němu, zdál se jako moc fajn chlap) je programátor – teoretik z Masarykovy univerzity, který zná PHP i J2EE „z manažerského pohledu“, a třetí účastník – jejich PHP senior – neví o Javě a J2EE nic (také nic proti němu, fajn kluk :-)
Zkrátka jejich postoj je takový, že PHP je skvělá technologie na jednodušší věci, jako je frontend pro Javovský backend, resp. nad databází. Inu dobrá, já jim to neberu, ale během celého rozhovoru mi hlavou běhaly vzpomínky na nejrůznější veselé příhody (dalo by se přeložit jako „gay incidents“ :) s PHP:
mysql_*
Prostě při pomyšlení, že bych měl jít vyvíjet framework v PHP, se mě jímaly úzkostné pocity. Jasně, potenciální PHP-fanatik mi bude oponovat, že kdybych psal rovnou dobrý kód, tak jsem v pohodě. Ale není to pravda, a to hned několikrát:
if
y jen kvůli ošetření chyby je pravěká metoda táhnoucí se
snad ještě z dob Alana Turinga.Naproti tomu, když programuji v Javě, dobrý kód vzniká skoro sám (už se neubráním srovnání):
interface List
a implementaci ArrayList
java.util
a java.lang
mysql_*
a PDO
)Prostě při prvním komerčním projektu v Javě moje srdénko jen zaplesalo nad tím, jak neuvěřitelně hladce to jde od ruky.
A ještě ke složitosti J2EE.
Když srovnám PHP a JSP, tak to jsou zhruba srovnatelné technologie:
Jenže tam, kde PHP končí, tam J2EE teprve začíná. Pokud skutečně rezignujete na leta vývoje a nechcete se učit tagy ze Struts nebo anotace z JPA / Hibernate, prosím – můžete vše poctivě datlovat jako v PHP, psát si SQL dotazy (jednoduchost přístupu k výsledkům dotazu v PHP přes pole zajistí iBatis) a třeba si i prasit kód rovnou do HTML souborů.
Jenže v J2EE máte možnost jít dál. Co máte v PHP? Ano, je zde pár povedených věcí… Smarty, Zend Framework, CakePHP. Ale ty stejně jedou nad shnilým jádrem.
Pokud někdo říká, že PHP se naučíte rychleji než J2EE, tak já říkám ano, protože v PHP skoro není co se učit.
Když jsem s J2EE začínal, také jsem se zalekl té neuvěřitelné haldy nových pojmů, specifikací, zkratek, XML konfiguračních souborů a postupů; dále nutnosti použít IDE nebo aspoň buildovací nástroj (Ant), naučit se spravovat něco jiného než Apache HTTPD…
Ono totiž PHP je jen taková lehká nadstavba nad CGI – nad něj dává jen relativně jednoduchou syntaxi a spoustu knihoven použitelných z této syntaxe. Jenže když jde do tuhého a úroveň vašich projektů se vznese nad příklady z manuálu PHP, stejně musite začít řešit (hodně na přeskáčku):
atd.
A zatímco J2EE vás těmito „nesmysly“ zavalí hned zpočátku, protože postupy jsou standardizované a často se věci rovnou řeší „složitě“ s výhledem na budoucí rozvoj, PHP vás nechá, ať si děláte co chcete – zlepšující se programátoři časem začnou vytvářet „vlastní framework“, vlastní normu pro strukturu aplikace, vlastní knihovnu pro automatické ukládání objektů do DB, a tak dále, zatímco naprostí začátečníci – neprogramátoři mohou třeba takto (viz část „Přiřazení prvků v šabloně“):
Často potřebujeme vybrat data z databáze a následně je předat šabloně. Na začátku je tedy SQL dotaz:
$result = mysql_query("SELECT nazev, titulek, text, cena FROM tabulka WHERE id='$id'");Jak nyní předat data šabloně?
Nejjednodušší řešení je předat rovnou pole:
$smarty->assign('data',mysql_fetch_assoc($result));
Nyní se pokusím oprostit od Javy a zaměřit se čistě na PHP. Kdyby se někde v dalším textu vyskytlo slovo „Java“, klidně mi dejte virtuální facku :)
Zkusím tedy shrnout, jaké má PHP výhody a jaké nevýhody. Zkusím při tom zaujmout pokud možno nezaujatý postoj, i když případného čtenáře o tom po přečtení předchozí kritiky asi nepřesvědčím.
Komentáře nevedu, ale jestli se vám něco v následujícím výčtu nezdá, napište mi mail a já zde provedu veřejné pokání a omluvu sloníkovi elePHPantovi :)
Výhoda a nevýhoda jsou relativní pojmy. Proto navrhuji jako „baseline“ pro srovnání použít ostatní technologie použitelné na podobné účely jako PHP, tedy: ASP.NET, ColdFusion, Java EE, Perl, Python, Ruby (on Rails). Naopak neuvažoval bych kombinace typu C + CGI (příliš složité programování), Apache SSI (příliš omezená funkčnost), Caché Server Pages (příliš nesmyslná technologie), XML + XSLT + JavaScript (principiálně příliš jinde), ASP (zastaralé) a podobně.
Takže – posuďte sami:
Technologie PHP má spoustu výhod, díky které se rychle stalo populárním. Mezi ně patří např.:
null
[]
Na druhou stranu, PHP má také značné nevýhody, pro které jej mnozí kritizují a někdy i opouštějí; mimo jiné tyto:
set_error_handler()
je pouze slabá
náplast)PDO
Array()
Jak je vidět, seznam výhod a nevýhod je trochu nevyvážený. Nyní čekám polemiku :-) ondra@dynawest.cz
//PS:// Ale pořád ještě to není tak strašné, jako s Caché – kdo zkoušel, ví :-)
4. Jaká je perspektiva PHP z Vašeho pohledu?
Jsem PHP skeptik. PHP jakožto jazyk ztratil koncepci, rozšiřování se děje chaoticky. PHP jakožto knihovna se nehodí na tvorbu webových aplikací. Frameworky se to snaží suplovat.
Obrázky přejaty z http://www.nexen.net/…nt/index.php a http://shop.yourphppro.com/elePHPant.html.
(PS: Kdyby někoho zajímalo, proč je tento web v PHP, tak je to kvůli
Texy! ;-)
PS pro Jana Škráška: Porty Texy? Ruby nemám rád, python neumím, .NET
nechci a pro Javu ještě port není.