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 :: Передача параметров по ссылке
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Выделено в отдельную тему из темы "Репутация на форуме" Однозначно -- нет. Идея по сути порочна . Один ламер порекомендовал другого ламера. Кто-то что-то умное сказал -- ему 90% скажут фи-фи-фи. Оценить некому. Я тут сейчас выдам что-то на предмет передачи параметра по ссылке или по значению. Или еще хуже -- чем отличаются
a ( $b, $c );
function a( &$b, &$c ){ ... }
или
a ( &$b, &$c );
function a( $b, $c ){ ... }
Сколько здесь поймет?
P.S. Впрочем, если десяток напишет -- в чем отличие -- может и есть резон.
P.P.S. А если я ошибся - а за последние 3-4 года я ошибся не раз и не два (я тоже учусь). Мне за такие "уроки" -- что будет? http://forum.php.su/topic.php?fo...topic=11&p=1
Сколько минусов в профиле, или вообще... кирдык...
Помните, как в песне -- "Да и просто хотелось пожить!"
$a - большой при большой массив. На вскидку кто ответит приблизительное соотношение времени выполнения+вызова этих 4 функций?)
Кроме расположения функций в порядке от самого быстрого к самому медленному, хотелось бы увидеть оценку на сколько каждая более медленная функция проиграет более быстрой. Оценку можно дать хотя бы используя слова "сильно проиграет", "немного проиграет" Поправил синтаксическую ошибку и уточнил как было бы интересно увидеть ответ
Мелкий
Отправлено: 07 Мая, 2011 - 10:32:47
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Выделено в отдельную тему из темы "Репутация на форуме" Если интересно (хотя думаю, все отписавшиеся вверху знают ответы на эти вопросы) - можно описать.
Однако куда более правильным на мой взгляд является использование php 5.3 - в нем нельзя передавать ссылки на параметры. Изменил в соответствии с замечанием о неточности
Более того, использование передачи параметров функций по ссылке с тем, чтобы их изменить - это side-effect. Любые такие эффекты (будь то вот такое неявное изменение параметров, неглобальные константы или использование глобальных переменных) - есть не просто признак дурного стиля программирования, но и часто может привести к неожиданным результатам. Да и если функция пестрит определениями "global", то просто использовать ее в другом проекте ну никак не выйдет.
Поэтому, подводя итог - никогда не используйте "&" для side-effect. В php-версиях раньше 5.3 же следует использовать "&" только для передачи фактических параметров, которые явно будут велики по размеру. Может, стоит перенести эту дискуссию в новую тему, так как все же это уже имеет слабое отношение к первоначальному вопросу
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
OrmaJever
Отправлено: 07 Мая, 2011 - 15:37:17
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Однако куда более правильным на мой взгляд является использование php 5.3 - в нем все параметры всегда передаются по ссылке
а вот это новость! Как так? Использую 5.3.6 уже больше месяца и не замечал такого
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
EuGen
Отправлено: 07 Мая, 2011 - 16:37:38
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Перенесено из темы "Репутация на форуме" Да, я несколько обобщил. Видимо, не очень верно.
Имелось ввиду что больше нельзя передавать в функцию ссылку на переменную начиная с 5.3, но можно принимать ссылку.
Детальнее
Цитата:
allow_call_time_pass_reference (boolean)
In PHP5, allow_call_time_pass_reference is deprecated, in versions prior to PHP 5.3.0, use of this feature will emit an E_COMPILE_WARNING, and in PHP 5.3.0+, the warning is a E_DEPRECATED notice.
Исправил в соответствии с замечанием.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
OrmaJever
Отправлено: 07 Мая, 2011 - 17:37:59
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
а вот это новость! Как так? Использую 5.3.6 уже больше месяца и не замечал такого
как я сегодня выяснил благодаря примеру Champion'a:
в функции параметры всегда передаются по ссылке (по крайней мере PHP5.2 и PHP5.3), даже если кажется, что передача идёт по значению. А вот дальше идёт фокус: реально копирование значения переменной, переданной по значению, будет произведено только при изменении этого значения. Поэтому функция a1 существенно медленнее всех остальных - только в ней массив реально копируется.
----- PostgreSQL DBA
EuGen
Отправлено: 07 Мая, 2011 - 19:39:20
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Перенесено в новую тему
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.