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]   

> Описание: нужно просить добавить фичу
eai
Отправлено: 19 Мая, 2011 - 07:43:44
Post Id



Частый посетитель


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


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




Начну с кода

PHP:
скопировать код в буфер обмена
  1. function f($a){
  2.         var_dump($a);
  3. }
  4.  
  5. f(array(1,2,3));

Прекрасно работает, но
PHP:
скопировать код в буфер обмена
  1. function f(&$a) {
  2.         var_dump($a);
  3. }
  4.  
  5. f(array(1,2,3));

Валится потому как PHP не может передать адрес константы.
Не знаю как кто а я люблю массивы PHP, это прекрасное эффективное создание.
Однако писать функции с где аргумент массив передается не по ссылке брр, расход памяти и времени, значит надо писать по ссылке, но тогда низя пользоваться с передачей константы. Ну почему бы разработчикам не передавать адрес константы как это в С на пример сделано. Есть у кого мысли, может в PHP написать ?
 
 Top
EuGen Администратор
Отправлено: 19 Мая, 2011 - 08:55:56
Post Id


Профессионал


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


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




Не так давно обсуждалась эта тема:
http://forum.php.su/topic.php?fo...1&topic=7315


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Stierus Супермодератор
Отправлено: 19 Мая, 2011 - 08:57:34
Post Id



Рекордсмен по количеству сообщений за 7 дней


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


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




ну так вы генерируете переменную на лету.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function f(&$a) {
  3.     var_dump($a);
  4. }
  5. $x = array(1,2,3);
  6. f($x);

Так будет работать, так как данные в области памяти уже существуют, 1 указатель есть, можно передать ссылку.

(Отредактировано автором: 19 Мая, 2011 - 08:58:31)

 
My status
 Top
Мелкий Супермодератор
Отправлено: 19 Мая, 2011 - 09:22:51
Post Id



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


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


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




eai пишет:
Однако писать функции с где аргумент массив передается не по ссылке брр, расход памяти и времени, значит надо писать по ссылке

А аргумент всегда передаётся по ссылке. И копируется в значение только при попытке изменить этот аргумент.
Поэтому обе ваши функции (если бы обе работали), работали бы с одной скоростью.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 19 Мая, 2011 - 10:05:17
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Мелкий пишет:
всегда передаётся по ссылке

В php 5 - да, всегда.
В php 4 - как разобрано выше.
 
 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