Ссылки на PHP - PullRequest
       33

Ссылки на PHP

0 голосов
/ 16 сентября 2011

Глядя на ссылки в PHP, я довольно сильно сбиваю с толку. Может ли кто-нибудь объяснить мне, как это будет работать:

private $TestArray1 = Array()
private $TestArray2 = Array()

private function test1(){
$this->test2($this->TestArray1);
$this->test2($this->TestArray2);
}

private function test2($Array){
$this->test3($Array);
}

private function test3($Array){
$Array[0] = 1;
}

Где бы я поместил в этом «&», если бы хотелзакрытые переменные TestArray1 и TestArray2 должны быть отредактированы после того, как они установлены в функции test3?

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011
private $TestArray1 = Array()
private $TestArray2 = Array()

private function test1(){
$this->test2($this->TestArray1);
$this->test2($this->TestArray2);
}

private function test2(&$Array){
$this->test3($Array);
}

private function test3(&$Array){
$Array[0] = 1;
}

Таким образом, вам нужно указать & в объявлении функции и передать параметр как есть.

0 голосов
/ 16 сентября 2011

Поведение по умолчанию в php 5.3 - передавать объекты по ссылке.Вы можете использовать символ &, чтобы принудительно передавать примитивные типы также по ссылке, хотя обычно у вас не будет для этого никаких оснований.

Ваш пример может сбить с толку, так как вы, похоже, этого не делаетевнутри класса, поэтому частные модификаторы не имеют смысла.Нет причин передавать переменную-член в метод, так как метод может обращаться к ней непосредственно сам.

Надеюсь, что это поможет.

РЕДАКТИРОВАТЬ: И я также должен отметить, что, очевидно, массивы не считаются объектом для "передачи по умолчанию по ссылке".То есть & требуется здесь: codepad.viper-7.com/LBcr4m

...