问候亲爱的社区,
我正在尝试编写一个类,它通过对每个对象的引用的静态数组在内部跟踪所有实例:
# MyObject.php
class MyObject{
public static $_register = array();
public $_id = -1;
public $_value = '';
function __construct( $value ){
$this->_value = $value;
$this->_id = count( self::$_register );
self::$_register[ $this->_id ] =& $this; // I also tried '= &$this'
}
function foo(){ // outputs 'id : value'
echo $this->_id.' : ' . $this->_value . '<br />';
}
}
但是当我尝试改变$_register
我的主脚本时:
#main.php
require_once( 'MyObject.php' );
$test = new MyObject( 'hihi' );
$test->foo(); // outputs '0 : hihi'
MyObject::$_register[0] = NULL;
$test->foo(); // still outputs '0 : hihi'
它仍然输出'0:hihi'。Avar_dump( MyObject::$_register[0] )
表明它设置为 NULL,但应该引用的 MyObject 仍然指向同一个 Instance。
我试图理解 PHP 中的引用,这种行为对我来说是意料之外的。有人可以解释一下吗。
谢谢指教
PS:在我尝试一点 C++/Qt 之前,引用/指针的使用差异让我头晕目眩。