Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вернуть из функции ссылку
 
 автор: SHAman   (10.01.2008 в 19:18)   письмо автору
 
 

Задача такова. Есть класс. Некоторые методы класса собирают массивы. Массивы могут быть довольно большими как по количеству элементов, так и по объему. Если возвращать из метода сам массив, то будет возвращена его копия, что сожрет памяти и времени. Хочу возвращать ссылку на массив. Порыскал в инете, нашел такое решение:


functuion &foobar() {
    return $result;
}
$foo =&  foobar();


Попробовал - работает. Но что-то меня терзают смутные сомнения. Потому что с $foo дальше можно работать как с обычным массивом. Обычно, если возвращается ссылка, то работа последующая идет как-то так:
$foo->[0] а не так: $foo[0] или я ошибаюсь?

Попробовал сделать так:
$foo =  foobar(); //(убрал амперсанд)

результат тот же. Вопрос: работает ли возврат ссылки? И если нет, то как сделать?

PS. PHP4

   
 
 автор: kasmanaft   (11.01.2008 в 10:59)   письмо автору
 
   для: SHAman   (10.01.2008 в 19:18)
 

> $foo->[0]
Это, наверное, на указатель больше похоже. А если объекту присвоить ссылку на другой объект, то работа с первым будет полностью прозрачна

<?php
$a 
1;
$b = &$a;

$b++;
echo 
$a;

unset(
$a);
echo ++
$b// тем не менее, объект еще жив
         // потому что кто-то на него еще ссылается...
?>


>> Если возвращать из метода сам массив, то будет возвращена его копия, что сожрет памяти и времени.
Копия создастся еще при передачи массива... Надо в сам метод ссылку передавать:

functuion foobar($foo) {
    $foo++;
}

$foo = 1;
foobar(&$foo);
echo $foo;

   
 
 автор: SHAman   (11.01.2008 в 13:25)   письмо автору
 
   для: kasmanaft   (11.01.2008 в 10:59)
 

Вот я думал о том, чтобы передавать ссылку для записи в метод, в качестве параметра... Блин, кривая система... Но что поделать!?

Спасибо, kasmanaft.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования