4

PHPのクラスとオブジェクトで次の例を見つけました:基本ですが、バックグラウンドで何が起こっているのか理解できません。

ステートメントがあります:

すでに作成されているクラスのインスタンスを新しい変数に割り当てると、新しい変数は、割り当てられたオブジェクトと同じインスタンスにアクセスします。この動作は、インスタンスを関数に渡す場合と同じです。作成済みのオブジェクトのコピーは、クローンを作成することで作成できます。

これは、オブジェクトがデフォルトで参照によって渡されるという状態であると思います。したがってclone、実際のコピーを作成する場合は、そうする必要があります。(PHPには浅いコピーはありません。はい、cloneデフォルトであります。)

次の例(上記のリンクからコピー)について考えてみます。

<?php

$instance = new SimpleClass();

$assigned   =  $instance;
$reference  =& $instance;

$instance->var = '$assigned will have this value';

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

var_dump($instance);
var_dump($reference);
var_dump($assigned);

?>

そこで言われているように、これは以下を出力します:

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

理解できない。

$assigned = $instance;がデフォルトでオブジェクトに対する参照(エイリアス)による割り当てである場合、がに割り当てられている間に、その$assignedオブジェクトがそのプロパティをSimpleClass保持しているのはなぜですか。$varstringNULL$instance

4

2 に答える 2

1

それ$assigned = $instanceが参照による割り当てであると言うのは誤解を招きます。ポインタであるかのように考えることができます$instance。値(参照ではない)のセマンティクスがありますが、そのコピーの多くは同じオブジェクトを指すことができます。

一方、$reference =& $instanceエイリアスを作成します。変数の1つに何が起こっても、もう1つを調べるとすぐに表示されます。

于 2013-01-28T09:38:45.533 に答える
0

オブジェクト参照と変数参照には違いがあります。

オブジェクト参照は実際にはオブジェクト識別子であり、変数のとして格納されます。オブジェクト自体は、変数とは関係なく、別のテーブルに格納されます。

于 2013-01-28T09:44:36.290 に答える