Pro e contro di PHP

Lunedì 2 Marzo 2009 - 08:53

di Riccardo Degni

PHP e Open Source

Il percorso di studio utile al raggiungimento dello Zend Certificate PHP5 mi ha permesso di analizzare ogni singolo anfratto di PHP e, come logica conseguenza, di avere la consapevolezza dei punti forti di questo linguaggio e soprattutto dei punti deboli.

In questo post voglio discutere di entrambi gli aspetti e condividere con il pubblico di Edit i miei personali pareri sul linguaggio in questione e su come potrebbe essere migliorato.

Partendo dai pro, ci sarebbe tantissimo da scrivere: PHP è il linguaggio server-side più utilizzato nel globo e il motivo principale di questo successo può essere sicuramente sintetizzato con la frase "immensa potenza".

Non esiste compito server-side che PHP non possa svolgere e che non possa essere svolto con una relativa semplicità. Pensiamo ad esempio all’interazione con un servizio SOAP o REST: nonostante la complessità del procedimento che viene eseguito in background sia notevole, il programmatore può gestire le varie fasi semplicemente con chiamate di funzioni e creazioni di istanze.

Il modello OOP della versione 5 consente di creare codice veramente modulare e riusabile, permettendo di mettere in pratica quei Design Patterns prima impossibili. Questo punto non va sottovalutato: per le applicazioni sviluppate in team l’utilizzo di strutture OOP porta innumerevoli vantaggi, ma non basterebbe un solo articolo per elencarli tutti!

Le nuove estensioni che PHP5 ci offre sono molto interssanti e permettono di dare un tocco d’arte al nostro codice rendendolo più mantenibile: mysqli, SPL, Reflection, supporto per le eccezioni e così via.

Tutto ciò che "esiste" però, presenta dei punti deboli e PHP non fa eccezione. Prima di tutto, a mio avviso, il namespacing dovrebbe essere notevolmente migliorato. Facciamo qualche esempio. Per confrontare due stringhe tra di loro, una delle possibili soluzioni è quella di usare la funzione strcmp. Se invece vogliamo confrontare una stringa con una sua particolare sottostringa dobbiamo utilizzare substr_compare e non substr_cmp. Per invertire l’ordine dei caratteri di una stringa si usa la funzione strrev. Per invertire l’ordine degli elementi in un array, arrayrev dunque? No, la funzione si chiama array_reverse. E potrei continuare ancora.

Questo non è un vero e proprio punto di debolezza, ma è più una mancanza di eleganza che molte volte spinge il programmatore ad usare particolari "wrapper" con le proprie sintassi (io sono uno di quelli). Anche gli argomenti che le funzioni si aspettano dovrebbero essere "conformati" con una maschera comune.

Il numero di funzioni, inoltre, potrebbe essere notevolmente ridotto: se invece di ogni variante case-insensitive (contrassegnata dalle parole "case" o "i") si riuscisse ad aggiungere un valore boolean per indicare la presenza del case o meno od un array di opzioni del tipo:

array('case-sensitive' => false, /* altre opzioni */)

Alcune componenti di PHP ed opzioni in php.ini rappresentano un grave rischio per la sicurezza e a mio avviso non hanno ragione di esistere. Sono i casi di register_globals, dell’array $_REQUEST, delle magic_quotes e cosi via, che permettono ai beginners di "fare più in fretta" ma espongono l’applicazione (e il server) ad attacchi di immensa pericolosità.

Infine, uno dei vantaggi di PHP è anche uno dei suoi più discussi svantaggi, per questo ho deciso di inserirlo nella lista dei contro: l’assoluta mancanza di regole di scrittura, o "totale libertà". Per eseguire un compito server-side con PHP, lo sviluppatore può intraprendere milioni di strade differenti che portano APPARENTEMENTE allo stesso risultato. Ciò significa ad esempio, che anche un programmatore di scarsa esperienza può scrivere un’applicazione per interfacciarsi con un database o scrivere uno script per creare o eliminare i file su disco. Questo discorso potrebbe collegarsi con l’articolo scritto da Cesare riguardo all’HTML spazzatura: il "PHP spazzatura" esiste e continuerà ad esistere, magari venendo considerato addirittura "di qualità". Un semplice script per il profiling e controllo delle performance, potrebbe dare risultati sconcertanti, ma a molti (datori di lavoro e soprattutto clienti) questo non importa, "basta che funzioni".

Fortunatamente, con la versione 5 abbiamo sempre la stessa libertà ma con regole e sintassi molto più rigide e questa è un’ottima cosa.

Queste le mie considerazioni "compresse". Voi che ne dite?

Tags:

Categoria: PHP e Open Source | Permalink

Commenti

1

Non c’è che dire, lavoro su PHP e mi trovo pienamente d’accordo. Linguaggio estremamente versatile e potente ma ahimè troppo libero, anche solo nel controllo delle condizioni booleane.

La possibilità di scrivere codice spazzatura guardando solo velocemente al risultato e senza pensare al futuro, unito a una fase di debug non sempre agile (soprattutto ammettiamolo a causa della natura stessa del linguaggio, server-side) portano allo sviluppo di applicazioni che sono un inferno da mantenere ed ampliare!

# - postato da avastreg - 02 Marzo 2009 - 09:21

2

Trovatemi poi una banca che usa php sul suo sito…. la denuncio subito alle associazioni dei consumatori.

# - postato da Anto - 02 Marzo 2009 - 09:36

3

@anto
Perché scusa? Se configurato adeguatamente ed utilizzato in maniera corretta, non vedo perché non possa venir utilizzato in ambiti enterprise..

Detto questo, credo che in effetti quello della naming convenction inesistente sia uno dei problemi maggiori di PHP. Dipende dal fatto che siano state integrate tante funzioni in seguito, senza preoccuparsi di uniformarle.. Esempi come array_reverse, imagecreatefromjpeg, substr_compare, strstr sono imbarazzanti..

Però io resto dell’opinione che un bravo sviluppatore riesce a scrivere codice di qualità anche con questi problemi, magari utilizzando dei wrapper..

# - postato da lloyd27 - 02 Marzo 2009 - 09:43

4

@anto
tanto per smentirti subito: http://www.unicreditbanca.it e dovrai denunciarne parecchie altre…

Parlando invece seriamente sono d’accordo sull’articolo ma secondo me esistono varie tipologie di programmatori PHP, quindi un giorno si potrebbe fare un articolo parlando proprio di questo.
Il giovane programmatore attratto dalla semplicità del linguaggio che però al crescere di un progetto si ritrova con un php spazzatura e quello invece che non disdegna l’utilizzo di framework, classi e altre caratteristiche di quella che possiamo definire una programmazione avanzata.
Infine ci sta quello che pensa di conoscere il PHP solo perché capace di modificare un tema di un cms.

# - postato da cristian - 02 Marzo 2009 - 10:21

5

Mah, trovo i contro da voi scritti del tutto irrilevanti (namespace escluso: sfido un qualsiasi programmatore decennale di PHP a non usare ancora il manuale).

Se uno sviluppatore non sa scrivere codice buono, sono cavoli suoi. Non ho grandi esperienze con altri linguaggi, ma PHP mi da la possibilità di scrivere codice ottimo per siti enormi, e poi se il cliente vuole in 5 minuti che la milionesima pagina sia tutta diversa, te lo fa fare.

Se uno ha un bisturi può uccidere o salvare vite, sono affari suoi come lo usa.

# - postato da Slam - 02 Marzo 2009 - 10:54

6

Concordo con l’articolo anche se voglio esprimere qualche parere:
Si in php5 è stato introdotto il supporto agli oggetti ma in realtà se guardiamo i componenti di php pochi di questi sono realmente ad oggetti, io preferisco dire che php da la possibilità di programmare ad oggetti piuttosto che dire che php è un linguaggio ad oggetti.
Anche per quanto riguarda la gestione delle eccezioni è stata si implementata ma manca ad esempio finaly.
Quindi da questo punto di vista si ci sono le basi ma bisogna migliorarsi.
Concordo pienamente per quanto riguarda il nome delle funzioni, a volte davvero criptici (io tuttora dopo 3 anni di php faccio fatica ricordarmi cosa faccia strstr) e lo stesso vale per i parametri di queste funzioni che non seguono non sembrano avere degli schemi fissi.

# - postato da Luca Bernardi - 02 Marzo 2009 - 10:54

7

Mi trovo completamente d’accordo con tutti i punti dell’articolo, sia i pro che i contro.
La soluzione esposte nell’articolo da Riccardo per risolvere i problemi di namespacing è la migliore, anche se richiede una buona dose di maestria.

Concordo anche sulle opzioni di php.ini e sul fatto della libertà, che anche per me è davvero un pro/contro.

Inoltre, complimenti per lo Zend Certificate :)

# - postato da fritz - 02 Marzo 2009 - 11:49

8

Articolo perfetto. Php soffre della sua sintassi talvolta irritante (la funzione nl2br ne è un esempio) ma i suoi pregi rispetto alla controparte microsoft (non mi esprimo sugli altri) gode di notevoli pregi quali l’incredibile flessibilità (commento per esperienza diretta ovviamente).

A mio modo di vedere comunque il linguaggio andrebbe portato tutto ad oggetti, passaggio che ha eseguito actionscript in maniera eccellente nella sua terza versione.

# - postato da luglio7 - 02 Marzo 2009 - 12:04

9

Proprio l’esempio di nl2br non lo capisco…

# - postato da fmortara - 02 Marzo 2009 - 12:59

10

perfettamente d’accordo con Luca Bernardi, sarebbe più corretto dire che si può programmare a oggetti e non che il php è un vero OOP.
Oltre all’orribile namespace, alle note php gotchas (il valore 0 ritornato come false in strpos ecc) aggiungerei che per gli oggetti non esiste un vero overloading e che verrebbe veramente comodo avere una multi-inheritance. Per il resto è vero che una maggiore rigorosità sarebbe opportuna ma bisogna educarsi come programmatori senza per forza rinunciare alla flessibilità.

# - postato da sunny - 02 Marzo 2009 - 14:25

11

Anche io metterei tra i difetti quello di avere più strade per fare una certa cosa. Per il programmatore esperto la cosa ovviamente non crea problemi, ma chi si avvicina per la prima volta al linguaggio può trovarsi un po’ spiazzato.
Il namespace lo reputo anche io orribile, c’è stata veramente poca organizzazione a riguardo.

# - postato da Alessandro - 02 Marzo 2009 - 15:17

12

secondo me per certi versi è una guerra tra fanatici.

Una volta durante un colloquio mi definii (tra le varie cose di cui mi occupo) un senior web developer su piattaforma LAMP / JAMP

L’affermazione che seguì mi fece sorridere: ah PHP !! il buco con il linguaggio intorno!!

secondo me è luogo comunque falso tanto quanto quello che vede i poveri dobermann impazzire perchè gli cresce il cervello e non la scatola cranica ;-)

vero è che la natura di PHP permette di scrivere codice poco sicuro, arrivando a un risultato veloce e pieno di problematiche più o meno secondarie.

non a caso anche io sto guardando alle certificazioni Zend.

# - postato da Michele - 02 Marzo 2009 - 15:35

13

Programmo da anni in php e anni fa ero uno di quelli che scriveva php-non-riutilizzabile-spazzatura. Adesso lavoro con mvc e compagnia bella, ma anni fa, se php non fosse stato così semplice e flessibile, forse oggi non lavorerei “lato-server”. Credo che la flessibilità sia uno dei motivi del suo successo che potrebbe a lungo andare portare alla rovina questo potente linguaggio. Spero in un futuro dove il linguaggio possa essere indipendente dal motore di un sistema, un futuro dove ad esempio posso scegliere le specifiche ecma per programmare in php, dato che nonostante qualche inconsistenza, trovo ad esempio javascript un “linguaggio ad oggetti ma non troppo” molto rilassante da usare.

# - postato da Antonio Correnti - 02 Marzo 2009 - 15:47

14

Concordo anche io con l’articolo e con chi rileva che ci sarebbe bisogno di una svolta dal punto di vista dei namespace e OOP.
Magari con la versione 6 queste lacune saranno sanate.

# - postato da Gianni Leggio - 02 Marzo 2009 - 17:17

15

Ho programmato con molti linguaggi sia web che no, tra cui asp, jsp e appunto php.
Sono d’accordo su molti punti, ma non su quello della libertà, per me quello è il vero vantaggio di PHP.
A differenza degli altri linguaggi con PHP non ci si sente mai vincolati da nulla e l’immensa potenza e produttività di questo linguaggio ti permettono di scrivere del codice di alta qualità e anche riusabilità a patto che uno abbia una certa disciplina naturalmente.
Chi invece non ne ha (disciplina) fa delle cose orribili con qualsiasi linguaggio…

# - postato da kahroont - 02 Marzo 2009 - 18:41

16

@anto
ti sentiresti più sicuro con asp, jsp ecc? e perchè poi? Come tutti i linguaggi php ha i suoi pro e contro, il suo utilizzo dipende dallo sviluppatore

# - postato da flux - 02 Marzo 2009 - 18:49

17

Ottimo articolo, mi trovi d’accordo su tutto, si vede che è stato scritto da mani esperte.
Anche la tesi di kahroont è corretta comunque, la totale libertà è anche un vantaggio, ma mi sembra che anche nell’articolo sia scritto.
Ovviamente gli script terribili sono scritti da sviluppatori terribili, pensare le terribili conseguenze se si lavora in team…

Che migliorie ci aspettiamo da PHP 6?

# - postato da Giorgio - 02 Marzo 2009 - 18:50

18

sottoscrivo tutto, a parte per l’oggetto $_REQUEST: se ne fa volentieri a meno, ma mi sembra utile comunque averlo a disposizione, e inoltre la sua esistenza credo guardi verso una certa omogeneità con altri linguaggi

# - postato da seralf - 02 Marzo 2009 - 19:49

19

Interessante articolo.. a tal proposito stavo cercando qualche strumento per analizzare il mio codice php, per valutare se è “leggero”, pesante o migliorabile…
Potete consigliarmi qualcosa?

# - postato da Max - 03 Marzo 2009 - 10:25

20

Uhm.. magari qualche volta è meglio fare un search a “casa propria” ehehe http://php.html.it/articoli/le.....licazioni/

# - postato da Max - 03 Marzo 2009 - 10:30

21

Ci sono molto aspetti di PHP migliorabili; viste le sue dimensioni.
- E’ il linguaggio delle if, che complicano terribilmente la vita di chi deve leggere il codice; erano persino meglio i vecchi “GoTo” del Basic.
- La guida è scritta pensando a chi conosce bene il C, gli altri si arrangino;
non basta studiare un solo manuale (cartaceo) per programmare in PHP; forse ne bastano 4, non so, non ci sono arrivato!
- E’ scarsamente raccordabile con JavaScript, un vero peccato: complica la vita ad entrambi.
- Debug, un vero mistero; uso i vecchi sistemi di far scrivere a video i valori di una variabile; li usavo con i vetusti 64 K.
- Programmazione ad oggetti: è diversa da tutti gli altri linguaggi, in compenso è spiegata malissimo nella guida ufficiale, sia dal lato teorico che pratico.
Sarò buono e mi fermo qui. Il dibattito è intrigante.

# - postato da Loredelborgallo - 09 Marzo 2009 - 20:04

22

Ho iniziato ad usare il PHP fin dai suoi primi vagiti e mi sono fermato alla versione 4.3.3 et similar.. per intenderci non ho mai messo mano alla v5 o cosidetta ad oggetti. il PHP non è nato ad oggetti! se devo imparare un linguaggio OO non imparo certo il PHP che usa un sintassi orribile con i sui -> per non scendere in ulteriori e piu importanti dettagli.. piuttosto imparo Java.
PHP pero è versatile, lo uso sia per lo sviluppo di applicazioni classiche, che per la realizzazione di progetti intranet per aziende.
é facile da imparare, è potente, ha tantissime funzioni e lo si riesce ad adattare alle piu svariate esigenze.
dalla sua interazione con javascript mi preoccupo poco. è un linguaggio server side .. e da quella parte fa ottimamente il suo lavoro.
l’unica pecca per me è solo il fatto di non avere un ambiente di sviluppo stile .dot per il debug e la scrittura del codice, non che sia necessario ma sarebbe davvero in bonus.
in conclusione PHP voto 8 fino alle 4.3.3

# - postato da massimiliano - 01 Agosto 2009 - 11:13

Inserisci il tuo commento:





(puoi usare i seguenti tag HTML per formattare il testo -
a href, b, i, br/, p, strong, em, ul, ol, li, blockquote, pre):

 

Anteprima del commento