認定の練習をしているときに、MCQの質問に出くわしました。以下の通りでした。
Q:次のスクリプトを検討してください。何を出力しますか?
<?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;
?>
正しい1つの オプションを選択します。
- A. 5
- B. 10
- C.何もない
- D.コンストラクターはエラーをスローします
- E. 510
my_class
コンストラクターで。$global_obj
の参照によって初期化されているため、B:10を選択しました$this
。私がクロスチェックしたときまでに私の答えは間違っていました
説明として彼らはそれを述べました
これは本当にトリッキーなものです。最初の調査では、のコンストラクターは
my_class
それ自体への参照を内に格納しているように見え$global_obj variable
ます。したがって、後で値$global_obj->my_value
を10に変更すると、$aの対応する値も変更されることが予想されます。残念ながら、new演算子は参照を返しませんが、新しく作成されたオブジェクトのコピーを返します。したがって、スクリプトは5を出力し、正解はAです。
Ya私は説明が十分であることに同意しますが$global_obj
、$ thisの参照を明確に割り当てたため、それを消化することはできません。誰か詳しく説明してもらえますか?