[英]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.