parametri per riferimento

ciao,

mi scuso in anticipo se scrivo cose banali e non interessanti.

qualcuno sa spiegarmi i parametri per riferimento? Non riesco proprio a capirne la logica.

Ho questo codice:

function capitalize( &$str, $each=TRUE )
      {
         $str = strtolower($str);
         if ($each === TRUE)
            {
               $str = ucwords ($str);
            } else {
               $str{0} = strtoupper($str{0});
            }
         }
   $str = "hEllO WoRld";
   capitalize($str);
   echo $str;

ma quella & rimane un grosso punto interrogativo.

grazie

inviato 6 anni fa
gabar-el
X 0 X

In php (dalla versione 5) puoi passare le variabili ad una funzione o per riferimento o per valore.

Nel caso del passaggio per valore tu passi semplicemente alla funzione solamente il valore di una variabile, di conseguenza la variabile all'interno del tuo applicativo non viene modificato. es:

<?php
function pass_valore($variabile) {
          $variabile=0;
          echo $variabile;
}
$variabile_applicazione = 1;
$risultato = pass_valore($variabole_applicazione);
echo $risultato; // restituisce 0 perchè la funzione pass_valore mi restituisce 0
echo $variabile_applicazione; // restituisce 1 perchè $variabile_applicazione è rimasta invariata.
?>

Vedi i commenti, $variabile_applicazione ha passato solo il suo valore, è rimasta invariata.

Nel caso del passaggio per riferimento, tu non passi il valore di una variabile ma il riferimento a questa, si crea una specie di puntatore alla variabile del tuo applicativo, dall'esempio sopra modificato:

<?php
function pass_valore(&$variabile) {
          $variabile=0;
          echo $variabile;
}
$variabile_applicazione = 1;
$risultato = pass_valore($variabole_applicazione);
echo $risultato; // restituisce 0 perchè la funzione pass_valore mi restituisce 0
echo $variabile_applicazione; // restituisce 0 perchè $variabile_applicazione è stata modificata dalla funzione.
?>

Con il passaggio per riferimento $variabile_applicazione e $variabile fanno riferimento alla stessa variabile.

Ti è più chiaro?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Grazie MarioS

si molto più chiaro, anche se dovrò rimuginarci un pò su. Una spiegazione molto esauriente, grazie davvero.

Ma nel mio esempio se io non avessi passato la variabile per riferimento avrei ottenuto lo stesso risultato?

risposto 6 anni fa
gabar-el
modificato 6 anni fa
X 0 X

Dal tuo esempio, se lasci &$str nella funzione allora $str presente nell'applicativo cambia.

Se invece togli & allora $str dell'applicativo non cambia.

Anche se nel tuo codice principale hai una variabile con lo stesso nome di una variabile di una funzione (nel tuo caso $str e $str) php le vede come due variabili separate appartenenti ad ambiti differenti. Non sono la stessa variabile.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Mmhh... credo di avere capito. quindi io potrei nominare anche con nome diverso le variabili e poi dargli un riferimento? O dico una cavolata?  :P

risposto 6 anni fa
gabar-el
X 0 X

Esatto, in php con "&" crei dei riferimenti (non dei puntatori che sono un'altra cosa).

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda