[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Возврат массива (без передачи ссылкой) из функции
entroika
Нужно вернуть массив из функции. Ситуация примерно такая
class B {}

class A {
function getArray(){
$arr = array();
$obj = new B();
for($i=0;$i<5;$i++){
... // код изменяющий объект $obj
$arr[] = $obj;
}
// Здесь is_array($arr) выдаст TRUE
return $arr;
}
}


//

$objA = new A();
$myArray = $objA->getArray();
/* Здесь is_array($myArray) выдаст FALSE
* а мне нужен $myArray массив!!



В докухе нашел следующее:
Цитата
# (5) You have to force pass by reference and return by reference on arrays

function &array_ref_inc_x(&$array) {
    $array{'x'}++;
    return $array;
}

$array = array();
$array['x'] = 1;

$array2 =& array_ref_inc_x($array); # Need reference here as well as the function sig
array_ref_inc_x($array2);

print $array['x'] . ', ' . $array2['x'] . "\n";


Подход как в С/С++, но не хотелось бы передавать ссылку на массив чтоб функцией его заполнять. Если нет другого выхода, придется конечно сделать так но может все-таки у кого есть более удобное решение. Буду признателен.



Спустя 2 часа, 9 минут, 45 секунд (15.04.2011 - 14:09) Michael написал(а):
Цитата
/* Здесь is_array($myArray) выдаст FALSE

у меня на твоем примере выдает true. Какая у тебя версия php ?

Спустя 9 минут, 54 секунды (15.04.2011 - 14:19) entroika написал(а):
на данный момент не у компа на котором разрабатываю, точно сказать не могу, но точно 5+. У Вас на какой версии выдала true?

Спустя 3 минуты, 27 секунд (15.04.2011 - 14:23) Michael написал(а):
Цитата (entroika @ 15.04.2011 - 13:19)
на данный момент не у компа на котором разрабатываю, точно сказать не могу, но точно 5+. У Вас на какой версии выдала true?

5.2.8

Код:

Свернутый текст

class B {}
class A {
function getArray(){
$arr = array();
$obj = new B();
for($i=0;$i<5;$i++){
//... // код изменяющий объект $obj
$arr[] = $obj;
}
if(is_array($arr)) echo "array...\n";
return $arr;
}
}


print("<pre>");
$objA = new A();
$myArray = $objA->getArray();
print_r($myArray);
if(is_array($myArray)) echo '...array';
print("</pre>");


Результат:
Свернутый текст

array...
Array
(
[0] => B Object
(
)

[1] => B Object
(
)

[2] => B Object
(
)

[3] => B Object
(
)

[4] => B Object
(
)

)
...array

Спустя 4 минуты, 14 секунд (15.04.2011 - 14:27) entroika написал(а):
Спасибо, доберусь до ПК, проверю.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.