php5のオブジェクトプログラミングでよく言われる重要な点は、「デフォルトではオブジェクトが参照渡しされる」ということです。しかし実際には、これは完全に正しいわけではありません。以下にいくつかの例を示します。
PHP 参照はエイリアスです。つまり、2 つの異なる変数名が同じコンテンツを指します。 PHP5 では、オブジェクト変数はオブジェクト全体の値を保持しなくなりました。実際のオブジェクトのコンテンツにアクセスするには、識別子を保存するだけです。 オブジェクトがパラメータとして渡されるか、結果として返されるか、または別の変数に割り当てられる場合、他の変数には元の変数との参照関係はありませんが、どちらも同じ識別子のコピーを格納し、オブジェクトの実際の内容を指します。同じオブジェクトです。
例 #1 参照とオブジェクト
<?php class A { public $foo = 1; } $a = new A; $b = $a; // $a ,$b都是同一个标识符的拷贝 // ($a) = ($b) = <id> $b->foo = 2; echo $a->foo."\n"; $c = new A; $d = &$c; // $c ,$d是引用 // ($c,$d) = <id> $d->foo = 2; echo $c->foo."\n"; $e = new A; function foo($obj) { // ($obj) = ($e) = <id> $obj->foo = 2; } foo($e); echo $e->foo."\n"; ?>
上記のルーチンは出力します:
2 2 2