Перечитал всю документацию, однако там нет ничего по моей ситуации. Простой пример: PHP: <?php function fun (&$a1, &$a2, &$b1, &$b2) { if (rand(1, 2)%2 == 0) { $b1 = &$a1; $b2 = &$a2; } else { $b1 = &$a2; $b2 = &$a1; } } $a1 = array(1, 3, 5, 7, 9); $a2 = array(2, 4, 6, 8, 10); $b1 = NULL; $b2 = NULL; fun($a1, $a2, $b1, $b2); echo "\n<div>a1=".print_r($a1, 1).".</div>"; echo "\n<div>a2=".print_r($a2, 1).".</div>"; echo "\n<div>b1=".print_r($b1, 1).".</div>"; echo "\n<div>b2=".print_r($b2, 1).".</div>"; ?> Результат: HTML: a1=Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 ) . a2=Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) . b1=. b2=. Ожидалось: HTML: a1=Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 ) . a2=Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) . b1=Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 ) . b2=Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) . Я что-то не учёл? Почему ожидаемое расходится с действительностью? Ну, и - как получить желаемое?
PHP: if (rand(1, 2)%2 == 0) { $b1 = $a1; $b2 = $a2; } else { $b1 = $a2; $b2 = $a1; } Внутри функции надо оставлять ссылки не на локальные ссылки
PHP: <?php function fun (&$a1, &$a2, &$b1, &$b2) { if (rand(1, 2)%2 == 0) { $b1 = $a1; $b2 = $a2; } else { $b1 = $a2; $b2 = $a1; } } $a1 = array(1, 3, 5, 7, 9); $a2 = array(2, 4, 6, 8, 10); $b1 = NULL; $b2 = NULL; fun($a1, $a2, $b1, $b2); echo "\n<div>a1=".print_r($a1, 1).".</div>"; echo "\n<div>a2=".print_r($a2, 1).".</div>"; echo "\n<div>b1=".print_r($b1, 1).".</div>"; echo "\n<div>b2=".print_r($b2, 1).".</div>"; ?>
Если внимательно почитать доку, то вообще-то там всё написано. Я от тебя такого не ожидал =) Ну ей богу.
Объекты передаются по тру ссылкам PHP: <?php function fun($a1, $a2, &$b1, &$b2) { if (rand(1,2)%2) { $b1 = $a1; $b2 = $a2; } else { $b1 = $a2; $b2 = $a1; } } $a1 = new arrayObject(); $a2 = new arrayObject(); for ($i=0; $i<10; $i++) { $i%2 ? $a1[] = $i : $a2[] = $i; } fun($a1, $a2, $b1, $b2); $a1[0] = 'Вася'; $b1[1] = 'Хацкер'; echo '<pre>'; print_r($a1); print_r($a2); print_r($b1); print_r($b2);
Благодарю, vs, работает а какое описание функции предпочтительнее: Код (Text): function fun($a1, $a2, &$b1, &$b2) или Код (Text): function fun(&$a1, &$a2, &$b1, &$b2) ?
peaceful Объекты в PHP всегда передаются по ссылке PHP: <?php $a = new arrayObject(); $b = $a; $b[0] = 1; echo $a[0]; //1 символ & я поставил перед $b1 и $b2, чтобы не надо было инициализировать их в скрипте (они создадутся без ошибок).