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. eai - 19 Мая, 2011 - 07:43:44 - перейти к сообщению
Начну с кода

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 написать ?
2. EuGen - 19 Мая, 2011 - 08:55:56 - перейти к сообщению
Не так давно обсуждалась эта тема:
http://forum.php.su/topic.php?fo...1&topic=7315
3. Stierus - 19 Мая, 2011 - 08:57:34 - перейти к сообщению
ну так вы генерируете переменную на лету.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function f(&$a) {
  3.     var_dump($a);
  4. }
  5. $x = array(1,2,3);
  6. f($x);

Так будет работать, так как данные в области памяти уже существуют, 1 указатель есть, можно передать ссылку.
4. Мелкий - 19 Мая, 2011 - 09:22:51 - перейти к сообщению
eai пишет:
Однако писать функции с где аргумент массив передается не по ссылке брр, расход памяти и времени, значит надо писать по ссылке

А аргумент всегда передаётся по ссылке. И копируется в значение только при попытке изменить этот аргумент.
Поэтому обе ваши функции (если бы обе работали), работали бы с одной скоростью.
5. DeepVarvar - 19 Мая, 2011 - 10:05:17 - перейти к сообщению
Мелкий пишет:
всегда передаётся по ссылке

В php 5 - да, всегда.
В php 4 - как разобрано выше.

 

Powered by ExBB FM 1.0 RC1