LONGEPASS
Q85.

在 PHP5 環境中,若 $obj 是個物件變數,則有關 "$obj2 = $obj;" 的描述那些是正確?

電腦軟體設計共同科目 · 乙級 · Q85

難易度分析

4 / 5

本題採複選形式,要求考生必須全面掌握物件參考傳遞、屬性同步異動以及記憶體回收機制等複數概念,且需在多個相似選項中精確區分正確項,因此增加了判別難度。

正確答案 (複選):①, ②, ④

  • ① 此敘述意指將 $obj 的參考指定給 $obj2,亦即兩者指向同一物件:在 PHP5 中,物件變數的預設賦值行為是參考傳遞(Reference Assignment),`$obj2 = $obj` 會使兩者指向記憶體中的同一個物件實體,而非建立副本。
  • ② 改變 $obj 中的成員時,也會影響 $obj2 的成員:由於 `$obj` 與 `$obj2` 指向同一物件實體,修改任一變數的物件屬性或呼叫修改狀態的方法,都會直接影響另一個變數所見的物件狀態。
  • ④ 若接著再執行 "unset($obj)" 亦不會執行解構方法:`unset($obj)` 僅刪除該變數參考,但物件本身仍被 `$obj2` 引用,參考計數(Reference Count)未歸零,因此不會觸發解構方法(`__destruct`)。

錯誤選項解析

  • ③ 此敘述意指將 $obj 的物件複製一份給 $obj2,亦即兩者指向不同物件:此描述錯誤,PHP5 的物件賦值並非值複製(Value Copy)。若要建立獨立副本,必須使用 `clone` 關鍵字(如 `$obj2 = clone $obj`),否則兩者仍指向同一物件。
Learning Tip

"本題核心考點為 PHP5 物件賦值機制與參考計數記憶體管理。常考陷阱是混淆 PHP4(物件預設值複製)與 PHP5(物件預設參考傳遞)的行為差異。實務上若需獨立副本應使用 `clone`,並注意 `unset()` 僅移除變數名稱而非銷毀物件,只有當所有參考都被移除時才會呼叫 `__destruct()`。"

學員答題分佈

①此敘述意指將 $obj 的參考指定給 $obj2,亦即兩者指向同一物件0%
②改變 $obj 中的成員時,也會影響 $obj2 的成員0%
③此敘述意指將 $obj 的物件複製一份給 $obj2,亦即兩者指向不同物件0%
④若接著再執行 "unset($obj)" 亦不會執行解構方法0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目