PHP for Absolute Beginners - cea mai bună carte de introducere in PHP-ul modern


 12 Dec, 2015  doru  738  
php mvc book

Am citit câteva cărți de introducere în PHP. Am mai citit și din altele fără să le termin. Cele citite complet ar fi: Jump Start PHP - cu aceasta m-am decis să încep (bine mai citisem câte ceva până la ea). Proastă alegere! O carte scrisă prost, cu un cod plin de erori și scris în maniere diferite (parcă de mai multe persoane). Am citit apoi PHP & MySQL: Novice to Ninja - bunicică dar puțin cam învechită, Head First PHP & MySQL, la fel ca cea precedentă (cu mențiunea că urmează să apară ediția a doua în care ni se promite mai mult POO (Programare Orientată pe Obiecte).

Dintre cele citite parțial trebuie să menționez PHP and MySQL Web Development (4th Edition), în traducerea apărută la Teora, o carte temeinică, plină de exemple reale și utile dar - din păcate - prea învechită (va apărea o nouă ediție - engleză - în 2016).

PHP for Absolute Beginners

Dacă azi ar trebui să aleg o carte introductivă în PHP aș alege fără să stau pe gânduri PHP for Absolute Beginners (2 edition - July 31, 2014) de Jason Lengstorf , Thomas Blom Hansen apărută la editura Apress.

Ce este așa deosebit la această carte? Totul, aș putea spune.

Încă de la început ești introdus în ultimele practici și tehnici PHP: programarea orientată pe obiect, extensia PDO - de conectare la baza de date și, poate cea mai importantă caracteristică, abordarea (sau modelul de proiectare [desing pattern]) MVC (Model - View - Controller) în dezvoltarea aplicațiilor web. Venind din Python - mai exact de la web framework-uri în Python ca Django, GoogleAppEngine & Bottle.py sau webapp2 - la PHP amestecat cu HTML și interogări MySQL brute rămăsesem cu o impresie neplăcută de modul de dezvoltare a saiturilor în PHP. Amestecul de PHP și HTML plus interogări MySQL face aproape imposibil de înteles ce se petrece pe o astfel de pagină de cod mai ales prost indentată. Evident, comparația nu este corectă: nu se poate compara dezvoltarea unui sait folosind un web framework cu scrierea de la zero a acestuia. Dar, și așa, un sait făcut de la zero în PHP este mult mai ininteligibil și urât privirii decât unul făcut în Python în special datorită faptului că in Python indentarea face parte din sintaxă.

Ei bine, în această carte, aplicația dezvotată pe parcurs - un blog funcțional, aproape gata de încărcat pe web (mai trebuie stilizat și adăugat un RSS/Atom feed și alte câteva mici chestii de securitate și particularizare) - este codată urmând modelul MVC de separare a preocupărilor (concern separation): fiecare pagină de pe sait este codată în trei pagini de cod - o pagină model în care te ocupi cu interogarea bazei de date și prelucarea primară a datelor, una view care este de fapt o pagină HTML care va fi afișată utilizatorului și care are parametri ce vor primi date de la codul PHP  din controller - a treia pagină - al cărui rol este să îmbine cele două pagini anterioare, modelul si view-ul, și să răspundă la (și să creeze) URL-uri dacă e cazul. Separând astfel codurile, PHP în controller, HTML în view și tot ce ține de stocarea și prelucrarea datelor - în esență clase PHP cu interogări MySQL - în model, structura codului ce constituie saitul și chiar funcționalitatea acestuia sunt mult mai logice și mai ușor de înțeles în special pentru saituile medii-mari.

Treptat și practic sunt introduse și concepte mai avansate: alte modele de proiectare (de ex. Factory Pattern), diagrame UML pentru vizualizarea grafică a codului - a claselor și a relațiilor dintre ele, încapsularea (encapsulation) datelor unei clase (interzicerea accesului direct la variabilele unei clase), folosirea unui obiect DirectoryIterator pentru a traversa fișierele dintr-un folder, PHP Data Objects (PDO) și multe altele.

O altă calitate esențială, alături de informatiile furnizate, este felul cum și când acestea sunt introduse și puse în practică (in cadrul aplicației dezvoltate pe parcursul întregii cărți - blogul). Aici se vede măiestria didactică a autorilor. Mi se pare foarte bine gândit faptul de a crea o aplicație reală pe tot parcursul cărții decât mai multe aplicații mărunte și "de jucărie" (fără legătură cu realitatea). Astfel vezi cum se dezvoltă efectiv o aplicație reală - nu e vorba numai de cod ci și de principiile care trebuie să te ghideze în această codare. Aceste principii sunt expuse concis și ilustrate complet și imediat. Cuvintele sunt alese cu grijă și nu sunt nici prea multe, nici prea puține, la fel și exemplele și "secretele meseriei" comunicate din când în când. Îmi vine în minte felul cum este ilustrat principiul lui Curly ([p. 49] anume că fiecare funcție/clasă trebuie să facă un singur lucru și pe acela să-l facă perfect) - folosind un fragment de dialog din filmul City Slickers:

Curly: Do you know what the secret of life is?
(holds up one finger)
Curly: This!
Mitch: Your finger?
Curly: One thing. Just one thing. You stick to that, and the rest don’t mean shit.
Mitch: But what is the “one thing”?
Curly: (smiles) That’s what you have to find out.

Ar mai fi de adăugat și alte lucruri (toate bune) despre această carte însă vă las să le descoperiți singuri. Poate ar trebui totuși să menționez cele câteva concepte de CSS și JavaScript - puține dar folositoare și alese pe sprânceană și - bineînțels - interogările CRUD (CreateReadUpdateDelete - CreareCitireActualizareȘtergere) ale bazei de date MySQL codate folosind instrucțiuni preparate (prepared statements) pentru a evita injectarea SQL (SQl injection).

Închei adăugând - cu riscul de a mă repeta - o altă mare calitate (care se poate deduce și din cele de mai sus): PHP-ul, MySQL-ul și - în general, programarea web - sunt introduse și folosite urmând cele mai bune practici  (best practices) într-o manieră concisă, logică și modernă. A fost, cred, singura carte căreia nu i-am numărat zi de zi paginile rămase până la final, ba chiar mi-aș fi dorit să aibă mai multe...