Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Что обозначает знак "&" перед переменной?
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Что обозначает знак "&" перед переменной?

Страниц (1): [1]
 

1. samulet - 14 Июня, 2011 - 15:43:40 - перейти к сообщению
Поиск мне мало чего дал.
Помогите понять, что обозначает знак "&" перед переменной?

Вот пример кода:
PHP:
скопировать код в буфер обмена
  1. <?
  2. class request
  3. {
  4.         var $DATA = array();
  5.        
  6.         //
  7.         function init(&$arr)
  8.         {
  9.                 $this->DATA = &$arr;
  10.                 //print_r($this->DATA);
  11.         }
  12.        
  13.         function getInit()
  14.         {
  15.                 $obj = new request;
  16.                 $obj->init($_GET);
  17.                 return $obj;
  18.         }

... и так далее
В 7й строчке.
Отправьте к статьям, где это разбирается на примерах - доступно.
Спасибо.
2. OrmaJever - 14 Июня, 2011 - 15:48:36 - перейти к сообщению
эта сылка на переменую
Например
PHP:
скопировать код в буфер обмена
  1. $a = 5;
  2. $b = $a; // присваиваем переменой b значение а
  3. $b = 3; // изменяем значение b
  4. echo 'а =', $a, ' b = ', $b;
  5. // когда мы изменили b на а это никак не повлияло посколько мы просто скопировали в b значение а
  6. // тот же пример только со сылкой
  7. $a = 5;
  8. $b = &$a; // присваиваем переменой b значение а
  9. $b = 3; // изменяем значение b
  10. echo 'а =', $a, ' b = ', $b; // как видим изменяя b мы изменили и а. Посути b это и есть а поскольку там просто сылка.

так делают для экономии памяти, когда не нужно делать много копий переменых
3. morosit - 14 Июня, 2011 - 15:51:56 - перейти к сообщению
http://www.php.su/learnphp/?re
4. Мелкий - 14 Июня, 2011 - 15:53:50 - перейти к сообщению
samulet пишет:
Помогите понять, что обозначает знак "&" перед переменной?

Передача по ссылке.
Как уже описано выше - это позволяет не создавать ещё одну копию данных. Но что важнее и об этом надо помнить - передача параметра по ссылке позволяет внутри функции менять значение аргумента.

PHP:
скопировать код в буфер обмена
  1. function foo(&$param) {
  2. $param[] = 'ещё параметр';
  3. }
  4. $arr = range(0,2);
  5. foo($arr);
  6. var_dump($arr);
5. samulet - 14 Июня, 2011 - 20:43:13 - перейти к сообщению
Спасибо Вам огромное!

Так лаконично и понятно! Не удаляйте тему - новичкам пригодится.
Спасибо.
6. Slavenin - 15 Июня, 2011 - 10:57:52 - перейти к сообщению
важно помнить еще одну вещь: http://php.su/learnphp/phpoo/?php5 хотя, сам по-прежнему ставлю ссылки в нужных местах

PS жаль указатели в php так и не завели Огорчение
7. Comatose - 15 Июня, 2011 - 11:20:07 - перейти к сообщению
Вообще передача данных по ссылке в 5-й пыхе уже устарела, так что на новых версиях если не ограничиваться настройками можно получить вот такое:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. PHP Warning: Call-time pass-by-reference has been deprecated
  3.  
8. Мелкий - 15 Июня, 2011 - 11:23:02 - перейти к сообщению
Comatose, устарела такая передача:
PHP:
скопировать код в буфер обмена
  1. function foo($par) {}
  2. $arr = array();
  3. foo(&$arr);

Живущий вариант:
PHP:
скопировать код в буфер обмена
  1. function foo(&$param) {
  2. $param[] = 'ещё параметр';
  3. }
  4. $arr = range(0,2);
  5. foo($arr);

 

Powered by ExBB FM 1.0 RC1