2013-03-19 77 views
0

昨天我和我的一个朋友在静态类和实例类中走过;然后突然发生了一些奇怪的行为。一些变量没有通过引用传递

<?php 
class NumberContainerO { 
    public $_number; 

    public function __construct($number) { 
      $this->_number = $number; 
    }  
} 

$list = array(); 

$n = new NumberContainerO(1); 
$list[] = &$n->_number; 

$n = new NumberContainerO(2); 
$list[] = &$n->_number; 

$n = new NumberContainerO(3); 
$list[] = &$n->_number; 

var_dump($list); 
?> 

<?php 
class NumberContainer { 
    public static $_number; 

    public static function __Add($number) { 
      self::$_number = $number; 
    } 
} 

$list = array(); 

NumberContainer::__Add(1); 
$list[] = &NumberContainer::$_number; 

NumberContainer::__Add(2); 
$list[] = &NumberContainer::$_number; 

NumberContainer::__Add(3); 
$list[] = &NumberContainer::$_number; 

var_dump($list); 
?> 

输出

阵列(3){ [0] => INT(1) [1] => INT(2) [2] => & INT (3) } 阵列(3){ [0] => & INT(3) [1] => & INT(3) [2] => & INT(3) }

为什么INT(1),并且INT(2)不通过引用传递?

键盘:http://codepad.org/DsEZDFYf

+0

@MichaelRushton有两个var转储。 – hjpotter92 2013-03-19 19:10:22

回答

2

Unsetting References

当你做$n = new NumberContainerO(2);(和$n = new NumberContainerO(3);)你没有设置以前的$n->_number,破坏了参考。数组元素就成为您的标准非参考值。