[英]PHP 4: Can not understand the OOP behaviour
在练习认证时,我遇到了一个 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;
?>
选择正确的一个选项:
我选择和 B: 10 因为在my_class
构造函数中$global_obj
正在由$this
的引用初始化。 当我交叉检查时,我的答案是错误的
作为描述,他们提到
这是一个非常棘手的问题。 第一次检查时,似乎my_class
的构造函数在$global_obj variable
存储了对自身的引用。 因此,可以预期,当我们稍后将$global_obj->my_value
的值更改为 10 时,$a 中的相应值也会更改。 不幸的是,new 运算符不返回引用,而是返回新创建对象的副本。 因此,脚本将输出 5,正确答案是 A。
是的,我同意描述已经足够好,但我仍然无法消化它,因为我们已经明确地$global_obj
分配了$global_obj
的引用,那么这怎么可能呢? 哪位大神能详细解释一下吗?
我们已经明确地为 $global_obj 分配了 $this 的引用,那么这怎么可能呢?
您在构造函数中分配全局变量。 那时,您正在引用某种临时对象。 然后构造函数返回该临时对象的副本。 这是 $a 将引用的副本(而全局变量仍然引用临时对象)。
使用 php 4 进行 OOP 是很疯狂的。 我想你不应该理解 PHP 4 的 OOP 行为,而只是接受它......
此脚本将输出“5”,这将是 A 以及以下警告警告:从空值创建默认对象
原因是当你设置这个
`$global_obj = &$this;`
您的分配是对当前对象的引用
这篇文章可能会有所帮助
http://www.webmaster-source.com/2010/02/25/why-do-some-php-variables-have-an-ampersand-before-them/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.