Ссылки и массивы в PHP - PullRequest
       1

Ссылки и массивы в PHP

0 голосов
/ 23 ноября 2010

Я новичок в программировании в целом и ссылках в частности. Я хочу манипулировать отдельными объектами в массиве по ссылке, чтобы я не работал над простыми копиями объектов, которые я хотел вставить в массив. У меня вопрос, как это сделать.

Например, предположим, у меня есть следующие строки кода:

$obj0 = blah;
$obj1 = blah;
$obj2 = blah;
$myArray = array($obj0, $obj1, $obj2);

Когда я сейчас получу доступ и изменю $myArray[1], будет ли это то же самое, что и изменение $obj1? Или я должен был бы изменить &$myArray[1] вместо этого?

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

Нет, изменение $myArray[1] - это не то же самое, что изменение $obj1. Однако, если вы работаете с объектом, на который они оба указывают, этот объект будет изменен.

Другими словами:

// Does not affect $obj1, but it does affect $obj1->foo
$myArray[1]->foo = "bar";

// Does not affect $obj1, which continues to point to the same object
$myArray[1] = null; 
1 голос
/ 23 ноября 2010

Как есть, вы не будете изменять исходные переменные.

Если вы хотите сделать это по ссылке, вы должны поставить эти амперсанды при настройке массива следующим образом.

$myArray = array(&$obj0, &$obj1, &$obj2);

Код:

    $a = "cat"; $a1 = "cat";
    $b = "dog"; $b1 = "dog";
    $arrRef = array(&$a, &$b); $arrCopy = array($a, $b);
    $arrRef[0] .= "food"; $arrCopy[0] .= "food";
    $arrRef[1] .= "house"; $arrCopy[1] .= "house";
    echo "a: $a   b: $b <br />";
    echo "a1: $a1   b1: $b1 <br />";

Выход:

a: catfood b: doghouse
a1: cat b1: dog 
0 голосов
/ 23 ноября 2010

В PHP5 объекты по умолчанию называются «по ссылке», поэтому нет необходимости ставить $myArray[1] перед '&'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...