PHP :: Ссылка или копия (регистр внутри)? - PullRequest
0 голосов
/ 01 марта 2011

Пожалуйста, помогите мне доказать, в случае, если переменная ссылка или копия.

Case1 - $ arr копия или ссылка?:

class Ex1{
 public static $var1=array(10=>'work', 20=>'home'); 
}
$arr=Ex1::$var1;

Case2 - $ arr копия или ссылка?:

 class Ex1{
     protected static $var1=array(10=>'work', 20=>'home'); 
     public static function getArr(){
      return self::$var1;
       }
    }
    $arr=Ex1::getArr();

Спасибо, Йосеф

Ответы [ 4 ]

4 голосов
/ 01 марта 2011

По моим расчетам, это должна быть копия.

class Ex1{
    public static $var1=array(10=>'work', 20=>'home');
}

$arr=Ex1::$var1;

var_dump($arr);

$arr[15] = 'play';

var_dump($arr);

$arr2=Ex1::$var1;

var_dump($arr2);

Ex1::$var1 = array(10=>'work', 15=>'asylum', 20=>'home');

$arr3=Ex1::$var1;

var_dump($arr3);

var_dump($arr2);

дает

array
  10 => string 'work' (length=4)
  20 => string 'home' (length=4)

array
  10 => string 'work' (length=4)
  20 => string 'home' (length=4)
  15 => string 'play' (length=4)

array
  10 => string 'work' (length=4)
  20 => string 'home' (length=4)

array
  10 => string 'work' (length=4)
  15 => string 'asylum' (length=6)
  20 => string 'home' (length=4)

array
  10 => string 'work' (length=4)
  20 => string 'home' (length=4)
2 голосов
/ 01 марта 2011

Обе копии. По умолчанию только объекты передаются по ссылке.

1 голос
/ 01 марта 2011

Измените $arr, а затем var_dump(Ex1::getArr());, и вы увидите, была ли это копия или ссылка.

редактировать: не видел Ex1 :: var1 был защищен

0 голосов
/ 01 марта 2011

Это будет копия, протестируйте её как:

$arr=Ex1::$var1;
$arr['omg'] = 'lol';
var_dump($arr);
var_dump(Ex1::$var1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...