Verso PHP 5: (OOP) Cambiamenti pericolosi rispetto a PHP 4
Mercoledì 12 Settembre 2007 - 09:14
di Simone Carletti

Dopo il post introduttivo agli oggetti in PHP 5, è bene fermarsi un momento per alcune raccomandazioni.
In PHP 5 una delle modifiche più rilevanti che riguardano la retrocompatibilità è il passaggio degli oggetti per riferimento e non per valore.
Questo significa, ad esempio, che modificare un oggetto passato come parametro all’interno di una funzione, in PHP 5 modificherà lo stato dell’oggetto stesso anche al di fuori della funzione stessa.
function Test() {
function Test() {
$var = 'foo';
}
function setVar($value) {
$var = $value;
}
function getVar() {
return $var;
}
}
function testVar($obj, $f) {
$obj->setVar('bar');
$foo = 'bar';
}
$t = new Test();
$foo = 'foo';
echo $t->getVar(); // foo
echo $foo; // foo
testVar($t, $foo);
echo $t->getVar(); // ?
echo $foo; // foo
Dato l’esempio sopra, in PHP 5 l’ultima chiamata restituirà 'bar' poiché l’oggetto è passato alla funzione per riferimento.
Di conseguenza la funzione modifica l’oggetto originale, non una sua copia come avviene ad esempio per i parametri stringa, nel nostro caso $foo.
Lo stesso discorso non vale in PHP 4 dove l’ouput della penultima riga sarebbe 'foo'.
Per non modificare l’originale di un oggetto potete copiarne il valore grazie all’operatore clone.
Nel nostro esempio, potremmo modificare la funzione testVar() come segue.
function testVar($obj, $f) {
$o = clone $obj;
$o->setVar('bar');
$foo = 'bar';
}
Attenzione, un semplice $o = $obj otterrebbe lo stesso effetto iniziale poiché la copia, anche in questo caso, avverrebbe per riferimento.
Come visto nel post precedente, il comportamento dell’operatore clone può essere modificato a piacere sovrascrivendo la funzione __clone() nella definizione della classe.
Categoria: PHP e Open Source | Permalink
Commenti
1
Ma c’è ancora davvero qualcuno che affronta ora il passaggio da php4 a php5?
Credevo che il “grande passo” fosse stato ormai compiuto, anche in Italia…# - postato da Gabriele Fabbri - 12 Settembre 2007 - 11:30
2
Mmmmh… bello pigro io sto ancora comodo nel mio guscio di PHP4.
Se veramente avessi voluto un linguaggio ad oggetti complesso e potente avrei scelto Java & Co.
3
Il vero passaggio ci sarà quando tutti gli hoster effettueranno il passaggio.
4
Io è un pezzo che uso PHP5 per via del SimpleXML…una libreria che secondo me sta rivoluzionando il modo di fare siti
5
rivoluzionando il modo di fare siti
Per quel che vedo in giro la minestra sta diventando sempre più uguale. Il massimo che trovi in giro sono personalizzazioni di WP/MovableType o Mambo/Joomla…
Non so… per carità forse meglio passare da PHP4 a PHP5 piuttosto che da PHP4 a JSP… ma solo per comodità propria. Poi dipende dalle funzioni che servono. Francamente il fatto di avere più funzioni e più complessità non necessariamente è un bene.
Forse fa bene all’ego di chi, programmando in PHP4 non si sentiva un vero programmatore moderno… ;)







