2012-01-07 19 views

risposta

8

Ciò significa che viene passato per riferimento anziché per valore ... IE qualsiasi manipolazione della variabile avrà effetto sull'originale. Questo è diverso da valutare dove eventuali modifiche non influenzano l'oggetto originale.

Questo viene chiesto più volte sullo stackoverflow.

+1

di aggiungere, "per riferimento" significa che è che si riferiscono allo stesso blocco di memoria allocata per la variabile in fase di cui al – Prof83

+1

come opposto a "in base al valore", il che significa che una copia della variabile viene creata da PHP in un nuovo blocco di memoria. – Kaii

+0

Ci sono due modi in cui il riferimento viene passato nel codice di esempio delle domande, [ho delineato entrambi] (http://stackoverflow.com/a/8769347/367456). – hakre

4

E 'usato per applicare le modifiche a singola istanza di matrice per matrice principale ..

Come:

// Ora i cambiamenti solito colpiscono array $ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

ma ora modifiche rifletterà in array $ wishesarray anche

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

Questo esempio ti mostrerà la differenza

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

Scopri i documenti PHP per questo qui: http://pl.php.net/manual/en/control-structures.foreach.php

+0

La sintassi _by reference_ spesso causa errori come: "Impossibile creare riferimenti a/da offset di stringa"? –

1

Per il codice nella sua interrogazione, non ci può essere risposta specifica dato perché il ciclo foreach interno è vuoto.

Quello che vedo con il tuo codice è che l'interno foreach itera su un riferimento anziché sul modo comune.

vi suggerisco di prendere una lettura della foreach PHP Manual page, che copre tutti e quattro i casi:

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question