2012-01-07 14 views

Odpowiedz

8

Oznacza to, że jest przekazywane przez odniesienie zamiast wartości ... IE dowolna manipulacja zmienną wpłynie na oryginał. Różni się to wartością tam, gdzie jakiekolwiek modyfikacje nie mają wpływu na oryginalny obiekt.

To jest pytanie wiele razy na stackoverflow.

+1

dodać, „Przez odniesienia” oznacza to odnoszące się do tego samego bloku pamięci przydzielonej dla zmiennej skierowania do – Prof83

+1

jako przeciwieństwie do "według wartości", co oznacza, że ​​kopia zmiennej jest tworzona przez PHP w nowym bloku pamięci. – Kaii

+0

Istnieją dwa sposoby, w jaki odniesienie jest przekazywane w pytaniu przykładowy kod, [Ja nakreśliłem oba] (http://stackoverflow.com/a/8769347/367456). – hakre

4

Jest on stosowany, aby zastosować zmiany w jednej instancji tablicy do głównej tablicy ..

jako:

// Teraz zmiany przyzwyczajenie wpływa array $ wishesarray

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

ale teraz zmienia odzwierciedli w tablicy $ wisharray również

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

Ten przykład pokaże Ci różnica

$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 

Wyjazd docs PHP do tego tutaj: http://pl.php.net/manual/en/control-structures.foreach.php

+0

Czy składnia _by_referencji często powoduje błędy takie jak: "Nie można utworzyć odniesień do/z przesunięć łańcucha"? –

1

kodu w swoim pytaniu, nie może być specyficzna odpowiedź udzielona, ​​ponieważ wewnętrzna pętla foreach jest pusty.

To, co widzę z Twoim kodem, to to, że wewnętrzna foreach iteruje nad odwołaniem zamiast zwykłego sposobu.

Proponuję wziąć czytamy o foreach PHP Manual page, obejmuje ona wszystkie cztery przypadki:

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