Raj*_*wal 1 php oop php4 class object
在申请认证时,我遇到了一个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;
?>
Run Code Online (Sandbox Code Playgroud)
选择正确的一个 选项:
我选择和B:10因为在my_class
构造函数$global_obj
中被引用初始化$this
.当我交叉检查时,我的答案是错误的
作为描述,他们提到了这一点
这是一个非常棘手的问题.在第一次检查时,似乎my_class
商店的构造函数在
其中引用了自己$global_obj variable
.因此,人们可以预期,当我们稍后将值更改$global_obj->my_value
为10时,$ a中的相应值也会发生变化.不幸的是,new运算符不返回引用,而是返回新创建的对象的副本.因此,脚本将输出5,正确的答案是A.
Ya我同意这个描述已经足够了,但我仍然无法消化它,因为我们已经清楚地分配$global_obj
了$ this的引用,那么这怎么可能呢?任何人都可以详细解释一下吗?
我们已经明确地给$ global_obj分配了$ this的引用那么这怎么可能呢?
您在构造函数中分配全局变量.那时,您正在引用一种临时对象.然后构造函数返回该临时对象的副本.这是$ a将引用的副本(而全局变量仍然引用临时对象).
使用php 4进行OOP是疯狂的.我想你不应该理解PHP 4的OOP行为,但只是接受它......