Массивы в PHP переданы значением или ссылкой?

Когда массив передается как аргумент методу, или функция - переданный ссылкой?

Что относительно того, чтобы делать это:

$a = array(1,2,3);
$b = $a;

$b ссылка на $a?

244
задан reformed 22 August 2016 в 16:25
поделиться

2 ответа

Для второй части вашего вопроса см. На странице массива в Руководстве , в которых (цитирование) :

Назначение 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

Как, на этот раз массив был передан «Ссылка».


Не стесняйтесь читать ссылки, объясненные раздел руководства: он должен ответить на некоторые ваши вопросы; -)

261
ответ дан 23 November 2019 в 03:09
поделиться
[

]Когда массив передается методу или функции в 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);
]
5
ответ дан 23 November 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: