Náš blog

kategorie blogu

Proč je PHP paskvil a proč se přesto tak hojně používá?

PHP je nekonzistentní a nepředvídatelný. Není proto divu, že neustále čelí ostré kritice z řad profesionálních vývojářů. I tak se ale jedná o velice populární programovací jazyk, který používá kdekdo. Jak je to možné? Pojďme se na to podívat zblízka.

O programovacím jazyce PHP toho koluje hodně. Například Jeff Attwood se na svém blogu Coding Horror o PHP vyjádřil jako „o jazyku, který není jazykem, ale spíše sbírkou libovolných věcí, virtuální explozí v továrně klíčových slov a funkcí.“ Eevee si vylévá svoji frustraci krásným přirovnáním PHP ke zvláštní sadě nářadí". Ian Baker dokonce vyrobil skutečné kladivo, které byste v takové sadě nářadí mohli najít.

Co je tedy s PHP špatně, že jím vývojáři tak opovrhují?

Programovací jazyk, pokud má být produktivní a užitečný, musí splňovat určitá kritéria:

  • předvídatelnost, aby programátor rozuměl fungování nástroje a mohl skrze něj vyjádřit své myšlenky;
  • konzistentnost, kdy příbuzné věci si jsou podobné, takže se stačí naučit pár principů, a ne moře výjimek;
  • stručnost, díky níž může programátor v moderních vyšších jazycích vyjádřit složitou věc jednoduše, a nemusí se zdržovat psaním "strojového kódu";
  • spolehlivost, díky které lze řešit skutečné problémy, a není třeba se zastavovat nad každým "chytákem" jazyka;
  • laditelnost, aby, když něco nefunguje správně, a programátor to má spravit, byla v prostředcích jazyka dostupná veškerá potřebná pomoc.

PHP si v těchto ohledech nevede moc dobře - zejména jeho dřívější verze.

Jazyk PHP byl vytvořen pro začátečníky

Podívejme se ale na úplný začátek. Rasmus Lerdorf vytvořil "Personal Home Page/Forms Interpreter" (PHP/FI) pro použití na svém webu; nejdříve v Perlu a pak v jazyku C. Na tento nástroj přišli další lidé, a začali se poptávat po různých rozšířeních. Z PHP/FI se vyvinula sada nástrojů "PHP Tools", z ní pak "PHP Construction Kit"; současně vznikl "Form Interpreter", který pracoval s databází a formuláři.

Dalším vývojem je PHP/FI verze 2.0, už jako ucelený program, a konečně interpretující jednoduchý programový kód vnořený do HTML kódu - takovou formu má i dnešní PHP.
První PHP bylo cíleno na začátečníky, o čemž se i Lerdorf sám zmiňuje v dokumentaci PHP/FI 2.0, kde zavrhuje typované operátory jazyka Perl. V PHP, který budou používat neprogramátoři, musí být syntaxe jednoduchá a snadná k naučení se.

Vývoj, který zanechal problémy

PHP verze 3, již pod jménem PHP znamenajícím tentokrát "PHP: Hypertext Preprocessor", vznikla v 1997, když Zeev Suraski a Andi Gutmans přepsali parser jazyka. Zeev a Andi založili společnost Zend Technologies a vytvořili Zend Engine, které se stalo jádrem PHP verze 4, v roce 2000.

Tato přirozená evoluce, od pár webových programů pro jeden web, k programovacímu jazyku pro začátečníky, až pak eventuálně k dnešnímu PHP, zanechala na PHP různé artefakty, které dnes straší webové programátory.

Lekce hebrejštiny zdarma?

Zend Technologies je z Israele. To je hodno poznamenat, protože se v PHP objevují stopy Hebrejštiny. Narazíte na funkci 'hebrev', která umí přeložit hebrejský text z logické reprezentace na vizuální; pravděpodobně ji nikdy nepoužijete. Horším příkladem je chybové hlášení o T_PAAMAYIM_NEKUDOTAYIM (?!), když jste nesprávně použili operátor ::.

V novějším PHP, verzích 5 a 7, byly některé neduhy opraveny, některé nedostatky byly doplněny a vyžehleny. Už vás nezaskočí T_PAAMAYIM_NEKUDOTAYIM. Zpracování chyb a výjimek bylo sjednoceno. Přibyly prostředky objektového a funkčního programování.

Některé věci se ale nevyplatí radikálně překopat: programy napsané pro staré verze PHP by přestaly fungovat v nové verzi. Například, funkce pro práci s textovými řetězci (strings) jsou pojmenovány všelijak - 'str_split', 'strpos' apod. Pořadí parametrů funkcí je někdy dost nahodilé, funkce 'implode' dokonce přijímá parametry v jakémkoliv pořadí.  Fungování základních operátorů a vlastnosti datových typů stále odpovídají designové filozofii z počátků tohoto jazyka.

Jak si PHP vede vedle jiných jazyků?

Jazyk PHP vedle ostatních jazyků s podobným zaměřením (Java, Python, Ruby, do jisté míry C#.NET, a jiné.) vypadá, jakoby byl vytvořen smečkou vzteklých vlkodlaků. Každý programovací jazyk se odněkud vyvíjel, a s novými verzemi postupoval k nějakému cíli - který někdy nebyl přímo v dohledu, a cesta k němu byla občas dost kamenitá.

Například pro Python byl přechod z verze 2 na verzi 3 obtížný kvůli zásadním změnám, ke kterým v jazyku došlo. Python 3 již existuje 10 let, ale zdaleka se mu nepodařilo vytlačit Python 2 ze všech jeho aplikací

Jazyk PHP je poznamenán trochu jinak. V jádru číhají zákeřné vychytávky, které nelze vymýtit, protože jsou tak zakořeněné v designu a v duchu samotného jazyka.

Jaké má PHP postavení na trhu? Jaké jsou jeho vyhlídky?

PHP má snad nejnižší prestiž mezi jazyky s ním běžně srovnávanými. Programátoři PHP jsou oceňováni relativně hůř než jejich kolegové. Paradoxně se jedná o velmi oblíbený a hojně rozšířený jazyk. Důvod je jasný – provozní prostředí pro PHP bývá standardně poskytováno na prakticky každém webovém serveru a jeho používání je jednoduché. Každý začátečník dokáže napsat funkční "skript" v PHP.

Kámen úrazu nastává při složitějším programování

Mnohem obtížnější je navrhnout a napsat korektní program, který splňuje zásady dobrého programování (nutné pro budoucí rozšiřitelnost a spravovatelnost takového programu) - tento výrok platí pro jakékoliv programování, ne výlučně pro PHP. Tím, že do "hry" vstupují všelijací amatéři, kutilové, studenti a začátečníci, se setkáváme s proměnlivou kvalitou webových aplikací - některé z nich jsou na trhu i velice úspěšné.

Různé CMS postavené na PHP, kterých je spousta, odrážejí skutečnost proměnlivé kvality. Bývají často vyvíjeny týmy nebo komunitami dobrovolníků-nadšenců (vedeny pár jednotlivci core-vývoje). Měřítkem úspěšnosti je to, zdali daná aplikace "dělá, co má", ne zda je "v jádru dobře navržena a rozložena"; to je zásadní. Zhoršující vliv má fakt, že PHP je tolik tolerantní různým programátorským prohřeškům. Za špatnou kvalitu kódu bývá kritizován například oblíbený WordPress (a obzvlášť jeho pluginy), stejné kritice neunikají ani jiné open-source CMS.

PHP v pravých barvách

Rasmus Lerdorf měl vizi jazyka přístupného pro začátečníky – a to se mu podařilo realizovat v PHP, ale za jakou cenu? Rozsah použití PHP dnes rozhodně přesahuje rámec původního designu tohoto jazyka. V žádném případě dnešní široce používané PHP-frameworky nespadají do kategorie „jednoduchých skriptů“. Jazyk PHP je v tomto nasazení použitelný, ale není při takovém použití komfortní.

Možná autoři udělali příliš velký kompromis, když navrhovali tento super-flegmatický jazyk, který se měl za každou cenu přizpůsobit nezkušenému programátorovi. PHP je programovacím ekvivalentem dětského kola se stabilizačními kolečky. Umožní vám rychle nasednout, ale jak začnete seriózně programovat a kolečka sundáte, zjistíte, že se na kole vlastně vůbec neudržíte. Pak se musíte odnaučit špatným zvykům, a naučit se programování či jízdě znovu, a správně. (Pokud jste z tábora Perlu, můžete tvrdit, že PHP je stabilizačními kolečky bez kola.)

Dá se ale předpokládat, že by se tento jazyk dočkal stejného úspěchu a rozšíření, kdyby se zpočátku nevydal svou specifickou cestou designu cíleného na začátečníky? Asi ne. PHP je dnes úspěšný díky, i navzdory, svým proviněním.

Pokud jde o tvorbu kvalitního softwarového produktu, záleží v prvé řadě na programátorovi – dobrý programátor se naučí jakýkoliv jazyk a využije jeho předností. Špatný programátor propadne špatným praktikám, a žádný sebevíc sofistikovaný nástroj jeho výtvory nezachrání.

Zdroje:

[1] https://blog.codinghorror.com/php-sucks-but-it-doesnt-matter/
[2] https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/
[3] https://blog.codinghorror.com/the-php-singularity/
[4] https://en.wikipedia.org/wiki/PHP#Early_history
[5] http://php.net/manual/phpfi2.php#history
[6] http://php.net/manual/phpfi2.php#overload
[7] http://php.net/manual/en/function.hebrev.php
[8] http://phpsadness.com/sad/1
[9] http://php.net/manual/en/ref.strings.php
[10] http://php.net/manual/en/function.implode.php
[11] http://phpsadness.com/sad/52
[12] http://phpsadness.com/sad/30
[13] https://wiki.python.org/moin/Python2orPython3
[14] https://evertpot.com/PHP-Sucks/
[15] https://bugs.php.net/bug.php?id=32100
[16] https://philsturgeon.uk/php/2013/09/09/t-paamayim-nekudotayim-v-sanity/
[17] https://en.wikipedia.org/wiki/Training_wheels
[18] https://tnx.nl/php.html
Technické oddělení
programátor
ZPĚT Chci Technická řešení
Technické oddělení
programátor email: podpora@impnet.cz