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]   

> Без описания
stas0
Отправлено: 08 Января, 2016 - 02:13:58
Post Id



Частый гость


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


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

[+][+][+]


Все доброго времени суток!
Возник такой вопрос и хочу расставить все точки над i.

В PHP есть понятие ссылок, якобы создав ссылку на переменную я могу пользоваться и редактировать эту переменную Через ссылку. Я так понимаю, что переменная будет существовать одна единая с такими данными, и если я создам на нее ссылку то смогу ею пользоваться через этот адрес.
Есть ли смысл использовать одну переменную с большими данными и создавать на нее ссылки для ее r.w. ради экономии памяти и процессорного времени?
И точно ли при создании ссылки я получу схожий эффект как в С?

Извините за банальный вопрос Нимб
 
 Top
Prizma
Отправлено: 08 Января, 2016 - 02:30:13
Post Id



Посетитель


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


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




Ну допустим будет у тебя один массив с кучей данных или 10 маленьких массивов с теми же данными разницы нет) А вот при передачи данных в функцию если данные там не изменяются, тогда можно выйграть память передав её по ссылке (точно не помню, но вроде php оптимизирован в этом плане и память под новую переменную не выделится пока ты не попробуешь изменить переменную)
Второй вариант это, когда наоборот тебе надо изменить переменную допустим массив и получить уже измененный массив, тогда лучше конечно сообщить переменную по ссылке и сразу изменять аргумент, чтобы в памяти не создавалась его копия, которая потом заменит оригинал.

Простые примеры:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $a = 1;
  3. $b =& $a;
  4. echo $b;    // 1
  5. $a++;
  6. echo $a;    // 2
  7. echo $b;    // 2
  8. unset($a);  // удаляем $a
  9. echo $b;    // 2
  10. echo $a;    // *пусто*
  11. $a = 1;     // присвоем новое значение
  12. echo $b;    // 2
  13. echo $a;    // 1
  14.  
  15. function foo(&$a) {
  16.     $a++;
  17. }
  18. $a = 1;
  19. foo($a);
  20. echo $a;    // 2
  21.  
  22. // По сути это хорошая альтернатива вот этому:
  23. $a = 1;
  24. function bar($a){
  25.     return ++$a;
  26. }
  27. $a = bar($a);
  28. echo $a;    // 2
  29. ?>
 
My status
 Top
stas0
Отправлено: 08 Января, 2016 - 02:37:13
Post Id



Частый гость


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


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

[+][+][+]


Спасибо, вопрос можно считать закрытым
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Января, 2016 - 04:36:33
Post Id



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


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


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




stas0
код, в первую очередь, должен быть лаконичен.
Нужна экономия на спичках в ущерб читабельности?
Какие-нибудь прожорливые компоненты целесообразней реализовывать на других ЯП
и использовать через API.
 
 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