четверг, 24 июля 2014 г.

Передать массив в функцию по ссылке

В PHP можно передавать массив в функцию по ссылке. Но что это значит? Лучше посмотреть на примере.
//Функция переводит фамилию в верхний регистр
function uppercase_surname ($person) {
    $person['surname'] = strtoupper($person['surname']);
}

$singer = array(
    'name' => 'Hilary',
    'surname' => 'Duff'
);

uppercase_surname($singer);
echo $singer['surname']; //"Duff" (т.е. регистр не изменился)

Здесь внутри функции происходит создание копии переданного массива. Разумеется, на это расходуется память и системные ресурсы сервера. Следовательно, при больших размерах передаваемого в функцию массива это может быть "тонким местом" производительности вашего скрипта.

Если функция предназначена для модификации данных, то разумно передавать в нее массив по ссылке. Это сэкономит ресурсы сервера на создание копии массива:
//Знак '&' просит php не копировать передаваемый массив, 
//а передать в функцию ссылку на него
function uppercase_surname (&$person) {
    $person['surname'] = strtoupper($person['surname']);
}

$singer = array(
    'name' => 'Hilary',
    'surname' => 'Duff'
);

uppercase_surname($singer);
echo $singer['surname']; //"DUFF" (регистр изменился)

Комментариев нет:

Отправить комментарий