PHP 4:无法理解OOP行为

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)

选择正确的一个 选项:

  • A. 5
  • B. 10
  • 没什么
  • D.构造函数将抛出错误
  • E. 510

我选择和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的引用,那么这怎么可能呢?任何人都可以详细解释一下吗?

Vin*_*rat 6

我们已经明确地给$ global_obj分配了$ this的引用那么这怎么可能呢?

构造函数中分配全局变量.那时,您正在引用一种临时对象.然后构造函数返回该临时对象的副本.这是$ a将引用的副本(而全局变量仍然引用临时对象).

使用php 4进行​​OOP是疯狂的.我想你不应该理解PHP 4的OOP行为,但只是接受它......