Blog webdeveloperski Patryk yarpo Jar

Przekazywanie przez referencję

Autor wiadomości Listopad 7, 2010

W PHP możemy stworzyć funkcję, do której nie przekażemy żadnych 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 znakó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 poprzednim 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ść 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ólnie warto 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 operujemy na dokładnie tych samym danych. Przy przekazywaniu przez wartość następuje skopiowanie wartości zmiennej (jeśli to duża tablica, to mamy dużą operację).

Komentarze (0) Trackbacks (0)

Brak komentarzy.


Leave a comment

 

Brak trackbacków.