Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.159.224] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Вдруг подумалось... а может при определении функции всегда задавать &$<varname>? Вроде как экономия памяти получается? а?
|
Сообщ.
#2
,
|
|
|
... и расход трафика. неэффективно!
|
Сообщ.
#3
,
|
|
|
Причем здесь траффик?
|
Сообщ.
#4
,
|
|
|
ой, извини, не внимательно посмотрел на трейд %))
интересная идея, вот что я нарыл по ней: Цитата Not using the & operator causes a copy of the object to be made. If you use $this in the class it will operate on the current instance of the class. The assignment without & will copy the instance (i.e. the object) and $this will operate on the copy, which is not always what is desired. Usually you want to have a single instance to work with, due to performance and memory consumption issues. Насколько я понял - при использовании ссылок действительно не создаются копии объектов класса, что экономит память. Но (имхо) действительный прирост производительности будет заметен только при использовании массивов или объектов довольно большого размера, так что насчет целесообразности использования метода я не уверен... |
Сообщ.
#5
,
|
|
|
Ну ясен пень, если массив большой или проект немаленький...
Хотелось бы минусы услышать. Если это так хорошо и правильно, то почему все так не делают? Естественно, в случае, если нужно только прочитать значение внутри функции. |
Сообщ.
#6
,
|
|
|
Та же проблема есть и в С. Гораздо хуже будет если не поставишь амперсанд - запаришся баг вылавливать!
|
Сообщ.
#7
,
|
|
|
Об этом спорят уже давно, особенно в C/C++. В C# эта проблема решена разделением на ссылочные типы и типы, передающиеся по значению.
PHP при передаче аргумента создается локальная копия. Есть другой вариант, кроме передачи по ссылке: объявление переменной глобальной: function process_array() { global $big_array; // Массив берется из внешней области видимости for($i = 0; $i < count($big_array); $i++) // Действия над массивом и т.д. } Так геморроя над кодом гораздо меньше, чем передача по ссылке. Есть другие уловки. Сейчас навскидку я про них рассказать не могу... |
Сообщ.
#8
,
|
|
|
Вот, написал небольшой advanced мануал по функциям в PHP и поместил его в FAQ. Всем PHP-программерам - must read!
|
Сообщ.
#9
,
|
|
|
Вопрос на засыпку:
В чем разница между function &foo() { return &$bar; } и function &foo() { return $bar; } $bar = &$foo(); |
Сообщ.
#10
,
|
|
|
Ошибочка:
Цитата function &foo() { return $bar; } $bar = &$foo(); Во-первых, переменная вроде как должна возвращать ссылку а возвращает переменную. Надо так: function &foo() { return &$bar; } (Это не я так придумал, см. PHP Manual). Во-вторых, $bar = &$foo();, ты вроде как вызываешь переменную-функцию, в то время как значение переменной (т.е. имя функции) не присвоено. Тогда уж надо бы так: function foo() { return $bar; } $func = 'foo'; $bar = &$func(); А вообще, зачем тебе так нужно издеваться? |
Сообщ.
#11
,
|
|
|
Да, ошибся чуть-чуть. Имелось ввиду:
function &foo() { return &$bar; } и function &foo() { return $bar; } $bar = &foo(); Так в чем же разница? |
Сообщ.
#12
,
|
|
|
Вся разница в стиле программирования. Конечно, всегда можно передавать параметр по указателю, НО когда передаем ф-ции указатель, ето означает, что мы собираемся модифицировать параметр, а ведь ето не всегда так. Передача указателя на переменную являющуюся в данном случае константой - ошибка стиля программирования, которая в результате может привести к реальным багам.
|
Сообщ.
#13
,
|
|
|
...это к теме передачи параметров в функцию.
А по поводу возврата - второй пример взят из PHP Manual. Есть подозрение, что первый пример поддерживается но, как говорится, depreciated... |
Сообщ.
#14
,
|
|
|
Не стоит заморачиваться с возвратом ссылок. Обычно это используется при работе с объектами. В PHP4 объекты копируются и передаются по значению, а в PHP5 - по ссылке. Выводы делаем соответствующие.
|
Сообщ.
#15
,
|
|
|
Вопрос в том, где истина. Тем более, если твой мануал прочитает десяток другой народу и не потрудятся в мануал глянуть...
|