Przekazywanie przez referencję Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
wtorek, 29 września 2009 17:11

W PHP możemy stworzyć funkcję, do której nie przekażemy żdanych danych, ani nic ona nie zwróci:

function example_1() {
    echo 'niczego nie przekazuje, niczego nie zwraca';

}
example_1(); // wyświetli tekst

 

Możemy stworzyć funkcję, która będzie coś zwracać:

function example_2() {
    return  'niczego nie przekazuje, niczego nie zwraca'; // tu zwraca ciąg nazków, ale może zwrócić liczbę, np. 3 albo tablicę, czy wartość logiczną
}
$result_2 = example_2(); // zwróci ciąg znaków i zapisze go w zmiennej $result_2
echo $result_2; // wyświetlamy to co, trzymamy w $result_2

A także funkcję, która przyjmuje podane parametry:

function example_3( $par ) { // parametrów może być więcej
$par = $par + $par;
return $par; // zwraca w wyniku sumę 
}
$parametr = 2;
$result_3 = example_3($parametr); // w $result_3 jest wartość 4
echo 'to co zwróciła funkcja: ' . $result_3 . '; // wyświetli 4
echo 'wartość $parametr: ' . $parametr . '';// wyświetli 2

W porzednim przykładzie, funkcja example_3 przyjmowała jeden parametr. Parametr ten był przekazywany "przez wartość", to znaczy, że wewnątrz funkcji była kopia wartości zmiennej. Można to zauważyć po wynikach wyświetlanych przez powyższy kod.

Istnieje jednak możliwośc przekazywania do funkcji zmiennych w taki sposób, aby działania na zmiennej wewnątrz funkcji powodowały zmiany wartości zmiennej poza funkcją. Należy wtedy przekazać zmienną przez referencję:

function example_3( &$par ) { // parametrów może być więcej
    $par = $par + $par;
    return $par; // zwraca w wyniku sumę 
}
$parametr = 2;
$result_3 = example_3($parametr); // w $result_3 jest wartość 4
echo 'to co zwróciła funkcja: ' . $result_3 . ''; // wyświetli 4
echo 'wartość $parametr: ' . $parametr . '';// wyświetli 4, zmienna została zmieniona w ciele funkcji

Szczególniewarto pamiętać o możliwości przesyłania argumentów (parametrów) do funkcji przez referencję, kiedy operujemy na dużych tablicach. Podczas przekazywania przez referencję nie następuje kopiowanie zmiennej, ciągle oeprujemy na dokładnie tych samym danych. Przy przekazywaniu przez wartość następuje skopiowanie wartości zmiennej (jesli to duża tablica, to mamy dużą operację).