ホームページ >バックエンド開発 >PHPチュートリアル >PHP の初心者なので、マニュアルのサンプルコードについて質問があります。

PHP の初心者なので、マニュアルのサンプルコードについて質問があります。

WBOY
WBOYオリジナル
2016-06-20 12:55:16929ブラウズ


最後の行 $assigned=$instance の結果について少し混乱していますが、これはコピーではないでしょうか? この場合、これら 2 つのオブジェクトは、内容は同じですがアドレスが異なる 2 つのオブジェクトであるはずです。コピーすると、$instance の値が割り当てられます ->var = '$assigned will have this value';$assigned に影響するのはなぜですか??


ディスカッションへの返信 ( solution)

いわゆる値の転送は、オブジェクトの値をターゲット オブジェクトに渡すことだけがコピーと同等であることを意味し、システムはターゲット オブジェクトに対して同一のメモリ空間を再度開きます。
いわゆる参照とは、メモリ上のオブジェクトのアドレスを対象オブジェクトに渡すことを意味し、対象オブジェクトと元のオブジェクトを同じメモリ記憶空間に対応させることと等価です。このとき、対象オブジェクトを変更するとメモリ内のデータも変更されます。
値の転送と参照の違い

いわゆる値の転送とは、オブジェクトの値をターゲット オブジェクトに渡すことだけが、システムをコピーすることと同じであることを意味します。同一のメモリ空間。
いわゆる参照とは、メモリ上のオブジェクトのアドレスを対象オブジェクトに渡すことを意味し、対象オブジェクトと元のオブジェクトを同じメモリ記憶空間に対応させることと等価です。このとき、対象オブジェクトを変更するとメモリ内のデータも変更されます。
値の転送と参照の違い


この違いは知っていますが、$assigned=$instance が値の転送であることに驚きました。なぜ一方を変更するともう一方も変更されるのか。

私の理解:

class SimpleClass{	var $test='test';}//对象实例 分配内存地址为 1$instance = new SimpleClass();var_dump($instance);//复制对象实例的值 存入内存地址 2 存入的是SimpleClass类返回的同一个标识符的拷贝//$instance = $assigned = new时返回的一个标识符id$assigned = $instance;var_dump($assigned);//引用传递 $reference 指向内存地址为 1$reference = &$instance;var_dump($reference);//改变了内存地址 1 $instance->test= 'modify';//因为是地址引用 所以$reference 也为null$instance = null;

マニュアルの説明: php5 では、オブジェクト変数はオブジェクト全体の値を保持しなくなりました。実際のオブジェクトのコンテンツにアクセスするには、識別子を保存するだけです。オブジェクトがパラメータとして渡されるか、結果として返されるか、または別の変数に割り当てられる場合、他の変数には元の変数との参照関係はありませんが、どちらも同じ識別子のコピーを格納し、オブジェクトの実際の内容を指します。同じオブジェクトです。

私の理解:

class SimpleClass{	var $test='test';}//对象实例 分配内存地址为 1$instance = new SimpleClass();var_dump($instance);//复制对象实例的值 存入内存地址 2 存入的是SimpleClass类返回的同一个标识符的拷贝//$instance = $assigned = new时返回的一个标识符id$assigned = $instance;var_dump($assigned);//引用传递 $reference 指向内存地址为 1$reference = &$instance;var_dump($reference);//改变了内存地址 1 $instance->test= 'modify';//因为是地址引用 所以$reference 也为null$instance = null;

マニュアルの説明: php5 では、オブジェクト変数はオブジェクト全体の値を保持しなくなりました。実際のオブジェクトのコンテンツにアクセスするには、識別子を保存するだけです。オブジェクトがパラメータとして渡されるか、結果として返されるか、または別の変数に割り当てられる場合、他の変数には元の変数との参照関係はありませんが、どちらも同じ識別子のコピーを格納し、オブジェクトの実際の内容を指します。同じオブジェクトです。


この識別子はメモリアドレスの関数であるのに、直接代入と参照代入に違いがないように感じるのはなぜですか?

コードが古すぎるため、指示が適切に設定されていません

$instance はオブジェクトです。 php5 以降、オブジェクトは参照によって渡される
ため、$assigned = $instance、
$assigned と $instance は同じオブジェクトを指します。一方のプロパティが変更されると、他方もそれに応じて変更されます

コードが古すぎるため、指示が適切に配置されていません

$instance はオブジェクトです。 php5 以降、オブジェクトは参照によって渡される
ため、$assigned = $instance、
$assigned と $instance は同じオブジェクトを指します。一方のプロパティが変更されると、他方もそれに応じて変更されます


説明ありがとうございます
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:アレイの再構築次の記事:アレイの再構築