簡體   English   中英

PHP 4:無法理解 OOP 行為

[英]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;
?>

選擇正確的一個選項:

  • A. 5
  • B. 10
  • C. 沒什么
  • D. 構造函數會拋出錯誤
  • E. 510

我選擇和 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM