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

4

1 に答える 1

2

参照の設定解除 を参照してください。

$n = new NumberContainerO(2);(and $n = new NumberContainerO(3);) を実行すると、前の の設定が解除され、$n->_number参照が破棄されます。配列要素は、標準の非参照値になります。

于 2013-03-19T19:13:07.847 に答える