Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5 для начинающих

  Все выпуски  

ФУНКЦИИ: Пользовательские функции - Передача аргументов (передача данных по ссылке)


Вниманию читателей!

Отдельные выпуски рассылки в той или иной мере взаимосвязаны. С предыдущими выпусками Вы можете ознакомиться:

  1. в архиве рассылки (оригиналы выпусков);
  2. на сайте рассылки (исправленные и дополненные версии).

# # #

Вы также можете подписаться на рассылку "PHP 5: Новые возможности".

PHP 6 уже в разработке!

Еще в ноябре 2005 года на встрече в Париже разработчики обсудили новые возможности следующей, шестой, версии PHP. Интересует ли Вас, какой будет эта версия? Примите участие в опросе, который проводится на сайте рассылки.

http://pterodactyl.l2p.net/e107/

[опрос на английском языке: PHP 6: Are you interesting in? (PHP 6: Вы зантересованы?) - YES (ДА) - NO (НЕТ)]

PHP 5 для начинающих

Аннотация

Передача данных в функцию по ссылке.

Обычно данные передаются в функцию по значению (by value). Это означает, что функция получает не саму передаваемую величину, а ее копию. Как следствие - изменения полученной копии внутри функции никак не влияют на оригинальную величину.

function foo($arg)
{
    $arg++;
}

$x = 1;
foo($x);
print $x;
                
1

Однако, данные могут передаваться не только по значению, но и по ссылке (by reference). Для этого перед аргументом в объявлении функции необходимо поставить знак &. В этом случае функция уже получает непосредственный доступ к величине. Изменения величины внутри функции оказываются действенными и вне ее.

function foo(&$arg)
{
    $arg++;
}

$x = 1;
foo($x);
print $x;
                
2

Внимание

Пользоваться передачей данных по ссылке следует с большой осторожностью, так как случайное изменение их внутри функции может привести к непредсказуемым результатам.

При передаче данных по ссылке можно использовать только переменные. Попытка передать константу или явно указанную величину приведет к возникновению фатальной ошибки.


function foo(&$arg)
{
    $arg++;
}

foo(1);
                
Fatal error:  Only variables can be passed by reference

Замечание

Можно передавать данные по ссылке и указывая знак & перед передаваемой переменной при вызове функции (а не в ее объявлении)[1]. Однако, такой способ считается устаревшим и поддерживается только для совместимости с более ранними версиями. Пользоваться им во вновь создаваемых приложениях не следует.

function foo($arg)
{
    $arg++;
}

$x = 1;
foo(&$x);
                    
Warning:  Call-time pass-by-reference has been deprecated...


[1] В зависимости от значения директивы allow_call_time_pass_reference в файле php.ini данные либо действительно будут переданы по ссылке, либо, вопреки намерению программиста, по значению.

Created with DocBook Created with Libxslt


В избранное