0
<?php
class SimpleClass
{
    public $var1;
}
$instance = new SimpleClass();
$assigned   =  $instance;
$reference  =& $instance;
$instance->var1 = '$assigned will have this value';

$instance = null; // $instance and $reference become null

var_dump($instance);
var_dump($reference);
var_dump($assigned);
exit;
?> 

誰でも助けることができますか?上記のコードの出力は次のようになります。

NULL
NULL
object(SimpleClass)#1 (1) {
   ["var"]=>
     string(30) "$assigned will have this value"
}

とは理解できますNULLが、どうして にならなかったのですか。私の理解によると、PHP 5オブジェクトは参照渡しであるため、参照も含まれているため、この場合は.$instance$reference$assignedNULL$assignedNULL

私の理解に加えて、PHP のマニュアルには、「既に作成されたクラスのインスタンスを新しい変数に割り当てると、新しい変数は、割り当てられたオブジェクトと同じインスタンスにアクセスします。この動作は、インスタンスをに渡す場合と同じです。機能。 "

誰でも説明できますか?

4

2 に答える 2

0

以下の行はPHPマニュアルのオブジェクトと参照からのものです

PHP リファレンスはエイリアスであり、2 つの異なる変数が同じ値に書き込むことができます。PHP 5 以降、オブジェクト変数にはオブジェクト自体が値として含まれなくなりました。オブジェクトアクセサが実際のオブジェクトを見つけることを可能にするオブジェクト識別子のみが含まれています。オブジェクトが引数によって送信されたり、返されたり、別の変数に割り当てられたりする場合、さまざまな変数はエイリアスではありません。それらは、同じオブジェクトを指す識別子のコピーを保持します。

于 2012-06-13T09:02:42.647 に答える
0

$インスタンス = null; // $instance と $reference が null になる

この時点で、それらをオブジェクトからリンク解除しました。それで全部です。別の変数がリンクされているため、オブジェクトは削除されません。

また、var_dump($GLOBALS) を使用すると、$assigned と $instance & $reference のペアの違いを確認できます。

于 2012-06-10T10:14:04.130 に答える