PHP 4:无法理解OOP行为

时间:2012-11-16 17:38:54

标签: php oop class object php4

在申请认证时,我遇到了一个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;
?>

选择正确的一个 选项:

  • 甲。 5
  • B中。 10
  • ℃。没什么
  • d。构造函数将抛出错误
  • 电子。 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的引用,那么这怎么可能呢?任何人都可以详细解释一下吗?

2 个答案:

答案 0 :(得分:6)

  

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

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

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

答案 1 :(得分:0)

此脚本将输出“5”,它将是A以及以下警告警告:从空值创建默认对象

原因是你设置这个

                 `$global_obj = &$this;`

您的分配是对当前对象的引用

这篇文章可能有所帮助

http://www.webmaster-source.com/2010/02/25/why-do-some-php-variables-have-an-ampersand-before-them/