giovedì 23 agosto 2012

Call-time pass-by-reference is deprecated

Deprecated: Call-time pass-by-reference has been deprecated in filename.php

A partire dalla versione 5.3.0 di PHP è stato deprecato il passaggio per riferimento quando si chiama un metodo o una funzione.
l'utilizzo dell'operatore & nelle chiamate dei vostri metodi - esempio: metodo(&$a) - genera il messaggio di warning mostrato all'inizio.
In PHP 5 infatti gli oggetti vengono sempre passati per reference (per riferimento) e quindi in questo caso l'operatore & non serve. Per i tipi di dati primitivi basta indicarlo nella definizione del metodo.
Ricordo infatti che dalla versione 5.3.0 di PHP è stato deprecato il passaggio per riferimento nella chiamata di un metodo ma non certo il passaggio per riferimento. Vediamo un esempio:

function functionA(&$var) { 
    $var++; 

functionB($var) {
    $var++; 

$n = 1;

// corretto 
functionA($n); 

// deprecated 
// functionB(&$n);

echo $n; // output 2 

In entrambi i casi si vuole che la variabile $n venga incrementata dal metodo ma il secondo modo (commentato per non far attivare il warning) è scorretto.
Se stai utilizzando codice di terze parti ti può capitare che venga ancora utilizzato il passaggio per riferimento a tempo di chiamata. Per far funzionare la tua applicazione puoi intervenire sul php.ini attraverso la seguente direttiva

allow_call_time_pass_reference = on

Questa però deve essere presa come una soluzione temporanea in attesa della versione corretta.

Nessun commento:

Posta un commento