Intervengo solo per segnalare questo articolo sulle critiche al PHP.
http://me.veekun.com/blog/2012/04/09...of-bad-design/
Intervengo solo per segnalare questo articolo sulle critiche al PHP.
http://me.veekun.com/blog/2012/04/09...of-bad-design/
This code and information is provided "as is" without warranty of any kind, either expressed
or implied, including but not limited to the implied warranties of merchantability and/or
fitness for a particular purpose.
io penso che se facesse così schifo nn sarebbe così sviluppato e usato.
a parte ciò, concordo sul fatto che la OOP sembra stata aggiunta "a caso", come per la serie: qui manca quindi aggiungiamola per seguire la moda.
Ha un riscontro pratico. PHP è totalmente inconsistente come linguaggio. Una testimonianza ne è il proliferare di progetti web basati su altri linguaggi quali Python, Ruby, Pharo (Smalltalk)... Che vengono addottati da nuovi progetti. Oggi non ha senso abbandonare PHP per l'enorme quantità di codice già sviluppata e l'enorme quantità di progetti già completi e in funzione che necessitano solo di piccole patch, lo stesso vale per COBOL, Ada e altri linguaggi nei loro settori.
A differenza di COBOL e Ada, PHP ha ancora un vantaggio, è il solo ad essere universalmente supportato ad oggi. Nonostante ciò, nell'avvio di nuovi progetti PHP sta perdendo terreno.
Detto ciò non critico l'utilità e ancora il dominio di PHP in ambito web, ma di sicuro la sua diffusione non ha nulla a che fare con la qualità del linguaggio, ma principalmente con motivi storici.
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
preciso che non voglio fare polemica solo fare una discussione costruttiva
Detto ciò nella tua risposta non mi hai dato alcun motivo per non utilizzare PHP rispetto a rubi o pyton. Il fatto che determinati programmatori decidano di utilizzare un linguaggio piuttosto che un altro non può essere, secondo me, una risposta esauriente all'argomento "php non va bene per imparare la programmazione ad oggetti"
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Ci sono decine di centinaia di siti che spiegano perché PHP non è un buon linguaggio, uno è quello linkato da shodan, che peraltro fa anche notare quanto le argomentazioni a favore di PHP più comuni siano di poco valore. Siccome i problemi non sono pochi non ho voglia di scriverli qui, bastino le poche parole che furono scritte nel suo manuale: PHP è un linguaggio pensato per cose semplici e non programmatori.
Poi col tempo hanno continuato ad aggiungere funzionalità implementandole come primitive e non come funzioni di libreria, preoccupandosi di renderle totalmente inconsistenti con tutte le altre funzionalità del linguaggio. Insomma: PHP non è un linguaggio potente/semplice/ben pensato, è un linguaggio che oggi è utile per ragioni storiche, con cui sono stati costruiti siti anche potenti, ma che sarebbero (a livello codice) oggettivamente molto più semplici se riproggettati in altri linguaggi, tuttavia questo richiederebbe uno sforzo troppo imponente e pochi vantaggi a breve termine.
Non mi dilungo perché come già detto puoi benissimo consultare un qualsiasi sito internet e vedere come effettivamente le critiche nei confronti di PHP siano fondate, le argomentazioni a favore di PHP molto poche e molto traballanti.
Ultima modifica di Scara95; 30-01-2014 a 19:08
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
beh era interessante come discussione. ad ogni modo ho letto un po' l'articolo e sinceramente cose come:
e tante altre simili,non mi sembrano tali da ritenere php un pessimo linguaggio.Subclasses cannot override private methods. Subclass overrides of public methods can’t even see, let alone call, the superclass’s private methods. Problematic for, say, test mocks.
Methods cannot be named e.g. “list”, because list() is special syntax (not a function) and the parser gets confused. There’s no reason this should be ambiguous, and monkeypatching the class works fine. ($foo->list() is not a syntax error.)
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Nessun singolo problema rende un linguaggio pessimo, ma quando tanti problemi si sommano, capisci bene...
E PHP ne ha davvero, davvero tanti.
Anche gli altri linguaggi hanno i loro problemi, ma veramente pochi ne hanno quanti PHP.
Poi PHP non ha un orientamento come linguaggio.
E', direi, l'unica realtà in cui l'anarchia ha avuto successo e non è rimasta utopia.
Il numero di sintassi speciali comunque da una buona idea della reale potenza di PHP.
Per concludere ripeto che PHP è indispensabile oggi, ma non è una buona scelta per imparare qualcosa e, per quanto riguarda l'avvio di nuovi progetti da 0, è meglio tenerlo come ultima spiaggia (beh, non proprio ultima ultima, ma abbastanza in là). Insomma se puoi usare qualcosa che ti toglierà tanti problemi perché non sei costretto dall'hosting/dall'utilizzo di particolari librerie/dalla volontà di un cliente, perché non farlo?
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Ma il punto è che quelli elencati da me non sono affatto problemi. E quell' articolo è pieno di situazioni del genere.
Quindi prendere come spunto l'articolo in oggetto, per dire php ha un sacco di problemi, è a mio avviso fuorviante.
E' come se avessi scritto pyton è pessimo perché non usa le parentesi per raggruppare blocchi di codice![]()
Ciro Marotta - Programmatore JAVA - PHP
Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.
Ma daiii, non diciamo cavolate. PHP è privo di ogni convenzione nella nomenclatura, non è chiaro su come agiscono la maggior parte dei costrutti nel caso di errore, ha operatori aritmetici e di confronto che agiscono in modo mooolto discutibile con conversioni automatiche inconsistenti, implementa un sacco di funzioni come primitive, gli oggetti sono stati aggiunti alla [i]"Sì che bello! Tutti ora usano gli oggetti! Facciamolo anche noi, anche se non c'entra con il resto!", (la lista è lunga e non ho voglia di continuare)...
Non puoi dire che non siano problemi, che il linguaggio non sia inconsistente e che tutti questi casi non inducano facilmente all'errore, giocando effettivamente contro il programmatore e non con il programmatore.
La critica dei blocchi di codice in Python non è niente in confronto, anzi direi che gli hai fatto un complimento: è totalmente consistente con le sue scelte.
Dimmi, per curiosità, oltre a PHP che altri linguaggi hai usato semi-seriamente? (intendo provato per più di un hello world scrivendo almeno un prototipo di qualcosa)
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Se leggi quell'articolo e non ti metti le mani nei capelli vuol dire che PHP è veramente pericoloso, perché fa pensare che incoerenze e comportamenti assurdi o tollerabili in praticamente ogni altro linguaggio a piccole dosi siano una cosa normale; sorry, è PHP l'anomalia. O quello, o sindrome di Stoccolma.
Inoltre, numerose anomalie lì riportate (parser ridicolo, identificatori "magici" mal inquadrati nel resto del linguaggio, pezzi di semantica del linguaggio mal copiata da altrove, rilasci ufficiali con più di metà degli unit test falliti, ...) sono testimonianza di come lo sviluppo sia partito e sia poi stato portato avanti in maniera estremamente poco rigorosa e quasi amatoriale da gente che di linguaggi "normali" ne sa molto poco.
Che si riesca a lavorare con un pasticcio del genere comunque non è l'argomento della discussione (e tra l'altro ti viene data una risposta all'inizio dell'articolo: sì, si può piantare un chiodo con un martello senza testa, ma resta un'idea idiota).
Se la domanda è "è un buon sistema per imparare la OOP" sono d'accordo con scara95 che la risposta è senz'altro "no", visto che per imparare per bene i concetti della OOP è utile lavorare con una sua implementazione ben fatta e che rispecchi il più possibile nel linguaggio quelli che sono i principi generali, e vederla applicata nella libreria standard, in modo da vedere anche come si usa. In PHP la OOP è una cosa attaccata su con lo scotch, copiando un po' da Java (ma in un linguaggio che di Java non ha nulla, per cui il risultato, tanto per cambiare, è un'arlecchinata), e il 90% della libreria standard è procedurale (oltre ad essere un pasticcio incoerente).
C# è mille volte meglio di PHP per iniziare con idee giuste. Implementa una OOP "alla Java" (quindi senza ereditarietà multipla - rimpiazzata con il più ristretto concetto delle "interfacce" - e con un po' di "ingessature"), ma la implementa in maniera ordinata, chiara e armonizzata con il resto del linguaggio, e ti trovi immerso subito in una libreria standard (il .NET Framework) che è pensata fin dall'inizio orientata agli oggetti.
Ultima modifica di MItaly; 30-01-2014 a 23:00
Amaro C++, il gusto pieno dell'undefined behavior.