某些变量未通过引用传递

Yesterday a friend of mine and I were walking through static classes, and instanced ones; then suddenly some weird behavior occurred.

<?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);
?>

Output

array(3) { [0]=> int(1) [1]=> int(2) [2]=> &int(3) } array(3) { [0]=> &int(3) [1]=> &int(3) [2]=> &int(3) }

Why is int(1), and int(2) not passed by reference?

Codepad: http://codepad.org/DsEZDFYf

See Unsetting References.

When you do $n = new NumberContainerO(2); (and $n = new NumberContainerO(3);) you're unsetting the previous $n->_number, destroying the reference. The array element then just becomes your standard non-referenced value.