Newsgroup: it.comp.www.php
Titolo: Differenze tra PHP4 e PHP5

Salve!
Sono circa 6 mesi che programmo in php, studiando guide e manuali
trovati online, e ora sto iniziando ad usare il mio primo framework
(codeigniter).
Tra tutte le pagine lette fino ad ora però, nessuno è riuscito a
spiegarmi in modo chiaro e conciso la differenza tra il PHP4 e il PHP5.
Ok, che la differenza maggiore sia il reale uso degli oggetti l'ho letto
milioni di volte. :)
E' la differenza *pratica* che non riesco a capire... forse perchè non
ho approfondito la questione framework...
Qualcuno può farmi un esempio breve e chiaro di una cosa che si può fare
con entrambe le versioni, ma con PHP5, grazie all'uso reale degli
oggetti, avrei qualche vantaggio?
Un esempio stupido (non sono un vero programmatore) ma non troppo (lo
studio da 6 mesi e ho gia realizzato qualcosa, usando spesso anche
classi e oggetti, quindi non sono proprio un cretino...). :)
Grazie mille a tutti!

 classi e oggetti, quindi non sono proprio un cretino...). :)
php4 è deprecato dagli sviluppatori di php stesso e questo dovrebbe
bastare.
Che significa deprecato? che non viene piu' sviluppato, i bug non piu'
corretti, nesunna nuova funzione.
non hai trovato grosse differenze in giro?
direi che questa paginetta ne elenca qualche centinaio (forse migliaio) 
http://www.php.net/ChangeLog-5.php
nota quante voci "added" ci sono 

 nota quante voci "added" ci sono 
Ho letto guide e manuali e non ho capito bene la differenza... figurati se
la capisco da un elenco di specifiche tecniche...
Grazie lo stesso. :)

 ho approfondito la questione framework...
Il framework è il (un) risultato, non la partenza!
Con il php4 avevamo un surrugato di OOP, con la versione successiva puoi 
realizzare applicazione ad oggetti più complesse e in linea con 
l'implementazione classica dell'OOP (dalla "base" variabili e metodi 
privati, pubblici e protetti, all'astrazione, overloading etc..)
	Francesco

 privati, pubblici e protetti, all'astrazione, overloading etc..)
Si, questa frase l'ho letta su decine di guide e l'ho sentita da centinaia
di programmatori... ma vorrei un esempio per capire meglio! :)
Grazie lo stesso.

 ho approfondito la questione framework...
Come hai intuito, la differenza piu` grossa e` negli oggetti. Tutto il 
resto e` praticamente identico, al punto che il 99% degli script fatti in 
PHP4 funzionano in PHP5.
Negli oggetti, le differenze principali sono nel passaggio per 
riferimento, nella protezione di attributi e metodi e nei magic methods.
In PHP5 quando passi un oggetto (non un tipo primitivo) a una funzione, 
automaticamente lo passi per riferimento, mentre in PHP4 lo passavi per 
copia. Questo significa che se lo modifichi nella funzione, modifichi 
l'oggetto stesso e non una sua copia, e all'uscita della funzione te lo 
trovi modificato.
In PHP4 dovevi esplicitarlo usando & nella funzione o nella chiamata.
Questa, assieme alla presenza di classi nella libreria base (come Iterator 
o simili), e` la principale causa di incompatibilita` degli script.
Per quanto riguarda la protezione, ora puoi dichiarare attributi e metodi 
di tipo public (default se non specifichi niente o se scrivi "var", per 
mantenere la compatibilita` col 4), protected (accessibili solo dalla 
classe e dai suoi derivati) e private (accessibili solo alla classe 
stessa). Mi pare che gli static ci fossero gia` in PHP4.
Infine i magic methods, che sono forse la migliore cosa che abbiano 
introdotto col 5. Sono dei metodi che ti permettono di sovraccaricare 
delle funzionalita` delle classi. Per esempio __get e __set ti permettono 
di intercettare tutti gli accessi in lettura e scrittura a variabili non 
dichiarate nella classe, e __call di fare lo stesso con metodi non 
dichiarati. __autoload ti permette di intercettare la creazione di classi 
non dichiarate (viene spesso usata per fare include dinamici quando serve 
invece di averli tutti in ogni script). Ecc. ecc.
La combinazione di queste tre cose apre le porte (o semplifica molto) a 
tutta una serie di tecniche di programmazione, tra cui molti design 
pattern.
Bye.

 classi e oggetti, quindi non sono proprio un cretino...). :)
Usando una *vera* OOP puoi creare un tuo modello di classi completo,
usando ereditarietà, incapsulazione e polimorfismo.
Esempio: supponiamo che tu abbia scritto un sito per la gestione di un
asilo per animali.
Usando la OOP completa, puoi avere una classe base "Animale" che
comprende - che ne so - Nome, Razza, Età, Origine, ecc.
Poi puoi scrivere una classe Cane che, per esempio, abbia una funzione
di validazione per controllare che la razza che stai cercando di
assegnargli è "giusta": non puoi - per dire - assegnare la razza
"Lipizzano" ad un cane(perché è una razza di cavalli).
Avendo le classi, puoi quindi strutturare un modello concettuale di
ciò che stai gestendo, e questo si riflette nel codice.
La tua Razza potrebbe a sua volta essere una classe e tramite un
decorator pattern avere assegnati tutti i tipi di animale cui può
appartenere.
E' solo un esempio, ma spero ti abbia reso le idee più chiare.
Andrea

 E' solo un esempio, ma spero ti abbia reso le idee più chiare.
Era proprio quello che cercavo. :)
Grazie mille, anche ad Alessandro Pellizzari.