php中的全局变量、对象和引用-它们是如何工作的?
我理解通过使用“=”对象是通过引用分配的,对于其他变量和数据类型(如字符串和整数),您需要使用“=&”通过引用分配。当通过引用显式使用“=&”指定对象时,它似乎不会影响指定。但是,当您将对象指定给全局对象时,它会这样做 考虑以下几点:php中的全局变量、对象和引用-它们是如何工作的?,php,oop,global-variables,pass-by-reference,Php,Oop,Global Variables,Pass By Reference,我理解通过使用“=”对象是通过引用分配的,对于其他变量和数据类型(如字符串和整数),您需要使用“=&”通过引用分配。当通过引用显式使用“=&”指定对象时,它似乎不会影响指定。但是,当您将对象指定给全局对象时,它会这样做 考虑以下几点: <?php $global_obj = null; class my_class { var $value; public function __construct() { global $global_obj;
<?php
$global_obj = null;
class my_class {
var $value;
public function __construct() {
global $global_obj;
$global_obj =& $this;
$GLOBALS['some_var'] = $this;
}
}
$a = new my_class();
$a->my_value = 5;
$global_obj->my_value = 10;
echo 'A: ' . $a->my_value; //5
echo '<br />';
echo 'Global Object: ' . $global_obj->my_value; //10
echo '<br />';
echo 'Globals Array Value: ' . $some_var->my_value; //5
?>
如果删除$以上代码中的符号,则通过引用将其分配给$global_obj。我的问题是,为什么在那里有符号似乎可以阻止这种情况发生
谢谢这里发生的是
$global\u obj
是对变量$this
的引用$this
是一个伪变量,存在于方法中,作为对当前对象的引用。但是谁知道当它超出方法范围时,$this
会发生什么呢。参考$this
可能不是一个好主意
事实上,如果您进一步研究它,在构造函数返回后,如果您检查$global\u obj
,它的值是null
。在方法退出后,PHP引擎可能会将$this
设置为null(但这在任何地方都没有记录),并且您的$global\u obj
会跟随它,因为它是对变量$this
的引用。当您在null
上设置属性时,它会自动实例化类stdClass
的新对象,因此它似乎成功了。当然,这与$a
中的对象完全不同