http://php.net/manual/zh/language.oop5.references.php#example-239
Example #1 引用和对象(片段)
<?php
class A {
public $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) |