PHP ::参考或复制(案例内部)?

时间:2011-03-01 11:34:16

标签: php reference

如果变量引用或复制,请帮助我证明这个案例。

案例1 - $ arr复制或引用?:

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

案例2 - $ arr复制或引用?:

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

谢谢, 约瑟夫

4 个答案:

答案 0 :(得分:4)

根据我的估算,它应该是副本。

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)

答案 1 :(得分:2)

两个副本。默认情况下,只有对象通过引用传输。

答案 2 :(得分:1)

修改$arr,然后修改var_dump(Ex1::getArr());,您将看到它是副本还是引用。

编辑:没有看到Ex1 :: var1受到保护

答案 3 :(得分:0)

这将是一个副本,测试它:

$arr=Ex1::$var1;
$arr['omg'] = 'lol';
var_dump($arr);
var_dump(Ex1::$var1);