PHP 文档 的 引用 这个示例 不懂什么意思

2017-04-17 16:35:28 +08:00
 1010011010

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 代表了什么?有什么区别?

2198 次点击
所在节点    PHP
7 条回复
Liang
2017-04-17 16:38:47 +08:00
指针
ss098
2017-04-17 16:39:19 +08:00
呃?

我打开这个页面没有 *1 ,*2 的标识。
ss098
2017-04-17 16:47:07 +08:00
*1 指的是两个变量都指向了同一个值,只是名字不同

*2 指的是 $d 通过引用指向了一个值,$d 本质上是一个指针,这个指针指向的值是 $c 。
Olive
2017-04-17 16:47:23 +08:00
@ss098 #2 同没有
ss098
2017-04-17 16:51:14 +08:00
@Olive #4 哈哈哈哈,我第一眼看到的时候也是蒙的,然后反应过来了。
Olive
2017-04-17 16:52:27 +08:00
@ss098 #5 哈哈哈
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)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/355422

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX