在练习认证时,我遇到了一个 MCQ 问题。如下所示。
问:考虑以下脚本。它会输出什么?
<?php
$global_obj = null;
class my_class
{
var $value;
function my_class()
{
global $global_obj;
$global_obj = &$this;
}
}
$a = new my_class;
$a->my_value = 5;
$global_obj->my_value = 10;
echo $a->my_value;
?>
选择正确的一个 选项:
- A. 5
- B. 10
- C、没有
- D.构造函数会抛出错误
- E. 510
我选择 B: 10 是因为在my_class
构造函数$global_obj
中是由$this
. 当我交叉检查时,我的答案是错误的
作为描述,他们提到
这是一个非常棘手的问题。乍一看,似乎 的构造函数将对
my_class
自身的引用存储在$global_obj variable
. 因此,可以预期,当我们稍后将 的值更改$global_obj->my_value
为 10 时,$a 中的相应值也会发生变化。不幸的是,new 运算符不返回引用,而是新创建对象的副本。因此,脚本将输出 5,正确答案为 A。
是的,我同意描述已经足够好了,但我仍然无法消化它,因为我们已经明确指定$global_obj
了 $this 的引用,那么这怎么可能呢?谁能详细解释一下?