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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Что обозначает знак "&" перед переменной?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
samulet
Отправлено: 14 Июня, 2011 - 15:43:40
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Поиск мне мало чего дал.
Помогите понять, что обозначает знак "&" перед переменной?

Вот пример кода:
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й строчке.
Отправьте к статьям, где это разбирается на примерах - доступно.
Спасибо.
 
 Top
OrmaJever Модератор
Отправлено: 14 Июня, 2011 - 15:48:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




эта сылка на переменую
Например
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-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
morosit
Отправлено: 14 Июня, 2011 - 15:51:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 307
Дата рег-ции: Июль 2010  
Откуда: Казахстан


Помог: 4 раз(а)




http://www.php.su/learnphp/?re

(Отредактировано автором: 14 Июня, 2011 - 15:52:29)

 
 Top
Мелкий Супермодератор
Отправлено: 14 Июня, 2011 - 15:53:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




samulet пишет:
Помогите понять, что обозначает знак "&" перед переменной?

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

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


-----
PostgreSQL DBA
 
 Top
samulet
Отправлено: 14 Июня, 2011 - 20:43:13
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Спасибо Вам огромное!

Так лаконично и понятно! Не удаляйте тему - новичкам пригодится.
Спасибо.
 
 Top
Slavenin
Отправлено: 15 Июня, 2011 - 10:57:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




важно помнить еще одну вещь: http://php.su/learnphp/phpoo/?php5 хотя, сам по-прежнему ставлю ссылки в нужных местах

PS жаль указатели в php так и не завели Огорчение
 
 Top
Comatose
Отправлено: 15 Июня, 2011 - 11:20:07
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Май 2011  
Откуда: Киев


Помог: 0 раз(а)




Вообще передача данных по ссылке в 5-й пыхе уже устарела, так что на новых версиях если не ограничиваться настройками можно получить вот такое:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. PHP Warning: Call-time pass-by-reference has been deprecated
  3.  


-----
Вы начинаете читать это предложение, которое заканчиваете читать.
 
 Top
Мелкий Супермодератор
Отправлено: 15 Июня, 2011 - 11:23:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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);


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB