プロが教えるわが家の防犯対策術!

▽PHP: オブジェクトと参照 - Manual
  http://jp.php.net/manual/ja/language.oop5.refere …

$a = new A;
$b = $a; // $a と $b は同じ ID を持つコピーです
// ($a) = ($b) = <id>
$c = new A;
$d = &$c; // $c と $d は参照です
// ($c,$d) = <id>


とありますが、
($a) = ($b) = <id>
($c,$d) = <id>
の違いを目で見て確認できるような簡単なサンプルコードはないでしょうか?

echoとかで中身を出力して、確かに違っているな、と言うのを確認してみたいのですが……

A 回答 (1件)

「参照」というのは、メモリ上の地番のことで、phpでは「シンボルテーブルのエイリアス」と記述されています。


http://jp.php.net/manual/ja/language.references. …

「シンボルテーブル」ってのは、云ってみれば本の目次のようなもの。
「エイリアス」はデータ格納場所(本の各ページ)の名前
<?php
$a = new A();
/* ここで、new という操作によって、オブジェクトが作成されて、オブジェクト格納場所を示す#id という名前(これがオブジェクト参照)が $a の内容として格納されます。
 */
$b=$a ;
var_dump($a,$b);
/* これは、変数内容をコピーします。
// $bの格納場所は、$a と違うところにあるけど、中身のオブジェクトを指すための #id は同じ
 */
$c= &$a;
var_dump($a,$b,$c);
/* リファレンス記号& により、$aの格納場所(参照)を $c の格納場所として、目次に書き込みます。
// よって $c は、$aと同じ格納場所の中身を見て動作します。
 */
$a = 12;
var_dump($a,$b,$c);
/* $aは 12、$bは元のオブジェクトidのまま、$cは$aと同じ格納場所をみてるので 12 になる
 */
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/02/17 08:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!