Verso PHP 5: (OOP) Cambiamenti pericolosi rispetto a PHP 4

Mercoledì 12 Settembre 2007 - 09:14

di Simone Carletti

PHP e Open Source

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.

Tags:

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.

# - postato da Orlando - 12 Settembre 2007 - 15:56

3

Il vero passaggio ci sarà quando tutti gli hoster effettueranno il passaggio.

# - postato da Marco - 13 Settembre 2007 - 09:32

4

Io è un pezzo che uso PHP5 per via del SimpleXML…una libreria che secondo me sta rivoluzionando il modo di fare siti

# - postato da Matteo - 13 Settembre 2007 - 21:31

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… ;)

# - postato da Orlando - 14 Settembre 2007 - 15:20

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