http://php.net/manual/zh/language.oop5.references.php#example-239
Example #1 引用和对象(片段)
<?php class A { publc $foo = 1; } $a = new A; $b = $a; // $a ,$b 都是同一个标识符的拷贝 // ($a) = ($b) = <id> *1 $b->foo = 2; echo $a->foo."\n"; $c = new A; $d = &$c; // $c ,$d 是引用 // ($c,$d) = <id> *2 $d->foo = 2; echo $c->foo."\n";
这里的 *1 和 *2 代表了什么?有什么区别?
![]() | 1 Liang 2017-04-17 16:38:47 +08:00 via iPhone 指针 |
![]() | 2 ss098 2017-04-17 16:39:19 +08:00 呃? 我打开这个页面没有 *1 ,*2 的标识。 |
![]() | 3 ss098 2017-04-17 16:47:07 +08:00 *1 指的是两个变量都指向了同一个值,只是名字不同 *2 指的是 $d 通过引用指向了一个值,$d 本质上是一个指针,这个指针指向的值是 $c 。 |
![]() | 7 byfar 2017-04-18 11:03:11 +08:00 #3 楼正解 这个特性在很多语言都有 比如:js python *1: 表示$a 和$b 这两个变量都指向同一个标识符<id> <id>指向(这里可以认为识符<id>是 new A 这个对象的引用)真正的对象 new A 。 访问$a 和 $b 都会操作同一个标识符<id>,近而操作到对象 new A 。 所以他们的操作结果和引用的操作类似,也印证了开头“默认情况下对象是通过引用传递的”这种错误说法。 *2: 就是引用,指向同一块内存( new A) |