Когда массив передается как аргумент методу, или функция - переданный ссылкой?
Что относительно того, чтобы делать это:
$a = array(1,2,3);
$b = $a;
$b
ссылка на $a
?
Для второй части вашего вопроса см. На странице массива в Руководстве , в которых (цитирование) :
Назначение Array всегда включает в себя значение Копирование. Используйте справочник оператора для Скопируйте массив по ссылке.
И данный пример:
<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
// $arr1 is still array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>
для первой части, лучший способ быть уверенным, это попробовать; -)
Рассмотрим этот пример кода:
function my_func($a) {
$a[] = 30;
}
$arr = array(10, 20);
my_func($arr);
var_dump($arr);
Это даст этому выводу:
array
0 => int 10
1 => int 20
Что указывает, что функция не модифицировала «снаружи» массива, который был передан в качестве параметра: он передан как копию, а не ссылка.
Если вы хотите, чтобы он передал ссылку, вам придется изменить функцию, таким образом:
function my_func(& $a) {
$a[] = 30;
}
и выходной выход:
array
0 => int 10
1 => int 20
2 => int 30
Как, на этот раз массив был передан «Ссылка».
Не стесняйтесь читать ссылки, объясненные раздел руководства: он должен ответить на некоторые ваши вопросы; -)
]Когда массив передается методу или функции в PHP, он передается по значению, если только вы явно не передаете его по ссылке, например:[
] [function test(&$array) {
$array['new'] = 'hey';
}
$a = $array(1,2,3);
// prints [0=>1,1=>2,2=>3]
var_dump($a);
test($a);
// prints [0=>1,1=>2,2=>3,'new'=>'hey']
var_dump($a);
]
[]Во втором вопросе []$b[
] это не ссылка на []$a[
], а копия []$a[
]. [
] Как и в первом примере, вы можете сослаться на []$a[
], сделав следующее:[
$a = array(1,2,3);
$b = &$a;
// prints [0=>1,1=>2,2=>3]
var_dump($b);
$b['new'] = 'hey';
// prints [0=>1,1=>2,2=>3,'new'=>'hey']
var_dump($a);
]