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 :: Версия для печати :: return $result
Форумы портала PHP.SU » » Операционная система и системные вызовы » return $result

Страниц (1): [1]
 

1. DeepVarvar - 11 Октября, 2011 - 20:25:44 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function etc() {
  2.   $result = pi()*2;
  3.   return $result;
  4.   }
  5.  
  6. $a = etc();


Что возвращается в $a?
Точнее, что происходит:

1) Перемещение ссылки на значение от $result к $a, но $result "остается жить" занимая память, хотя мы до него уже не достучимся?

2) Копирование ссылки на значение от $result к $a?

3) Перемещение ссылки на значение от $result к $a и неявный unset($result);?
2. caballero - 11 Октября, 2011 - 20:30:46 - перейти к сообщению
копирование результат
3. DeepVarvar - 11 Октября, 2011 - 20:32:51 - перейти к сообщению
caballero результат находится в сегменте памяти. Переменная является ссылкой на этот сегмент. Далее интересует вопрос озвученный выше.
4. Мелкий - 11 Октября, 2011 - 20:44:18 - перейти к сообщению
DeepVarvar пишет:
неявный unset($result);?

Почему неявный? Более чем явный. Уничтожаются все переменные, инициализированные в функции/методе.
Можно поглядеть, создав в функции объект класса с каким-нибудь echo в деструкторе.

А $a через механизм ленивого копирования PHP получает ссылку на результат, которая после выхода из функции является единственной ссылкой на эту область памяти.

Хотя гарантировать не смогу.
5. DeepVarvar - 11 Октября, 2011 - 20:46:23 - перейти к сообщению
Надо поэкспериментировать с достаточным объемом данных, мБ на 10...

 

Powered by ExBB FM 1.0 RC1