PHPピット:オブジェクトの参照


php 5のオブジェクトプログラミングでよく言及されるキーの1つは、「デフォルトではオブジェクトは参照によって伝達されます」です.しかし、これは完全に正しいわけではありません.以下、いくつかの例を用いて説明する.
phpの参照は別名であり、2つの異なる変数の名前が同じ内容を指す.php 5では、オブジェクト変数はオブジェクト全体の値を保存しません.本物のオブジェクトコンテンツにアクセスするために識別子を保存するだけです.オブジェクトがパラメータとして渡され、結果として返されたり、別の変数に値が割り当てられたりします.別の変数は元の参照関係ではありませんが、同じ識別子のコピーが保存されています.この識別子は同じオブジェクトの本当の内容を指します.
<?php
class A {
    public $foo = 1;
}  
$a = new A;
$b = $a;     // $a ,$b           
             // ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."
"; $c = new A; $d = &$c;    // $c ,$d              // ($c,$d) = <id> $d->foo = 2; echo $c->foo."
"; $e = new A; function foo($obj) {     // ($obj) = ($e) = <id>     $obj->foo = 2; } foo($e); echo $e->foo."
"; ?>

以上の出力:
2
2
2
原文住所:http://www.luoning.me/