Masa ludzi zadaje mi cią­gle to samo pyta­nie — skoro PHP został stwo­rzony jako język pre­zen­ta­cyjny, to jaki jest sens imple­men­to­wa­nia w nim kolej­nego języka pre­zen­ta­cyj­nego — sys­temu szablonów?

To prawda, że PHP powstał wła­śnie jako język do osa­dza­nia wewnątrz kodu HTML. Prawdą jest, że do dzi­siaj mnó­stwo ludzi w ten wła­śnie spo­sób go używa. Nic dziw­nego, pod­czas wczo­raj­szej wycieczki do Empiku, natknę­li­śmy się z Qwia­tem na stu­stro­ni­cową ksią­żeczkę o wdzięcz­nym tytule PHP — to proste.

Już nie tylko liczniki

Sam język jed­nak prze­szedł od cza­sów wer­sji pierw­szej ogromne zmiany, naj­więk­sze z nich miały miej­sce pomię­dzy trze­cim i pią­tym wcie­le­niem. Sku­piają się one na umoż­li­wie­niu łatwego budo­wa­nia dużych apli­ka­cji. Apli­ka­cji, gdzie mie­sza­nie war­stwy widoku i kon­tro­lera jest co naj­mniej wysoce nie­wska­zane, ze względu na czy­tel­ność i łatwość zarzą­dza­nia kodem.

Minęły czasy, kiedy języ­ków server-side uży­wało się do budo­wa­nia licz­ni­ków. Czę­sto całość tre­ści jest gene­ro­wana wła­śnie przez kod. Tyczy się to tak samo PHP, jak każ­dego innego języka, który może dzia­łać po stro­nie ser­wera. Zmie­niły się ocze­ki­wa­nia, wzro­sła skala pro­jek­tów, logika wewnątrz strony prze­stała wystarczać.

Ktoś powie zaraz, że prze­cież można oddzie­lić war­stwę widoku i nadal korzy­stać tam z PHP, tak jak robi to Cake­PHP. Można, cza­sem jed­nak nie warto. Cake powstał jako klon uzna­nego fra­me­worku Ruby on Rails. Oba celują w pro­jekty roz­wi­jane — przy­naj­mniej w pierw­szych sta­diach życia — metodą pro­gra­mo­wa­nia eks­tre­mal­nego. Kon­cen­trują się na jak łatwiej­szym zbu­do­wa­niu proof-of-concept i dal­szym jego roz­woju, już po odkrę­ce­niu dodat­ko­wych kółe­czek od roweru.

Serwisy budują projektanci, a nie programiści

Oczy­wi­ście, są apli­ka­cje, przy budo­wie któ­rych pra­cują pra­wie wyłącz­nie pro­gra­mi­ści. Niech będzie to Google Mail, YouTube, czy Wro­cek. Prawda jest jed­nak taka, że więk­szość komer­cyj­nych ser­wi­sów inter­ne­to­wych jest budo­wana dla kon­kret­nego klienta przez agen­cje interaktywne.

Ich ceny oscy­lują w prze­dziale od kilku do kilkunastu/kilkudziestu tysięcy i zyski z tego typu dzia­łal­no­ści ciężko prze­zna­czyć na zatrud­nie­nie połowy Micro­so­ftu. Dla­tego też do zadań pro­gra­mi­sty czę­sto należy tylko przy­go­to­wa­nie sil­nika, zaś resztę pracy wyko­nują pro­jek­tanci — webma­ste­rzy lub gra­ficy, w któ­rych gestii jest przy­go­to­wa­nie odpo­wied­niego kodu HTML, arku­szy CSS i połą­cze­nie tego w całość — pro­dukt, który można oddać klientowi.

Co z tego wynika? Ano wynika tyle, że przy zatrud­nia­niu waż­niej­sza jest dosko­nała zna­jo­mość obu wyżej wymie­nio­nych tech­no­lo­gii, niż zdol­no­ści pro­gra­mi­styczne. Nie każdy webma­ster zna PHP (Javę, Pythona, plat­formę .NET). Smarty można opa­no­wać w ciągu jed­nej doby, to zde­cy­do­wa­nie za mało na pozna­nie choćby czę­ści filo­zo­fii pro­jek­to­wa­nia zorien­to­wa­nego obiektowo.

This sit3 haxx0rd by scr1pt kiddi3z

Wyżej wspo­mnia­łem, że nie każdy jest pro­gra­mi­stą. Prak­tyka uczy też, że nie każdy powi­nien. Mia­łem w życiu wiele sytu­acji, w któ­rych zmu­szony byłem współ­pra­co­wać z ludźmi, któ­rzy zda­wali się całą swoją wie­dzę pozy­skać ze wspo­mnia­nej empi­ko­wej ksią­żeczki. Dość powie­dzieć, że podat­ność na SQL injec­tion to naj­lżej­sze z popeł­nia­nych przewinień.

Popu­larne grze­chy to ślepe include’owa­nie pliku, któ­rego nazwa tra­fiła przez wywo­ła­nia GET lub POST (naj­częst­sza, poza korzy­sta­niem z register_globals, przy­czyna ata­ków XSS), trzy­ma­nie waż­nych danych w cia­stecz­kach prze­glą­darki, rekor­dzi­sta umie­ścił tam nawet całe zapy­ta­nia SQL. Z pew­no­ścią wystar­czy­łoby na wypeł­nie­nie kalen­da­rza Daily WTF na naj­bliż­szy rok.

Sil­niki sza­blo­nów mają tę ogromną zaletę, że zapew­niają pia­skow­nicę (sand­box), w któ­rej można bez­piecz­nie wywo­łać kod nie­zna­nego pocho­dze­nia (czy­taj: cudzy kod). Nazwa pocho­dzi od ter­minu, jakim sape­rzy nazy­wają spe­cjalne pojem­niki i pomiesz­cze­nia do bada­nia i roz­bra­ja­nia zna­le­zio­nych przed­mio­tów, gdzie ewen­tu­alna eks­plo­zja nie naraża niczy­jego życia.

W tym przy­padku niczyje życie nie jest bez­po­śred­nio zagro­żone, ale ciężko wypra­co­wać sobie repu­ta­cję, kiedy co dru­gie wdro­że­nie two­jego sil­nika koń­czy się wła­ma­niem na ser­wer. Korzy­sta­nie w przy­padku pre­zen­ta­cji z pro­stego języka, zbu­do­wa­nego spe­cjal­nie do tego celu, daje pew­ność, że nawet naj­mniej kom­pe­tentny czło­wiek nie będzie w sta­nie nic zepsuć.

W zasa­dzie tyle chcia­łem napi­sać, ale może ktoś ma zupeł­nie inny pogląd na te sprawy? Z góry zapo­wia­dam, że nie inte­re­sują mnie argu­menty na pozio­mie Smarty to nie­ak­cep­to­walny narzut rzędu dzie­sią­tej czę­ści sekundy na każdą wyświe­tlaną stronę.