V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1010011010
V2EX  ›  PHP

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

  •  
  •   1010011010 · 2017-04-17 16:35:28 +08:00 · 2317 次点击
    这是一个创建于 2806 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2017-04-18 11:03:11 +08:00
    Liang
        1
    Liang  
       2017-04-17 16:38:47 +08:00 via iPhone
    指针
    ss098
        2
    ss098  
       2017-04-17 16:39:19 +08:00
    呃?

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

    *2 指的是 $d 通过引用指向了一个值,$d 本质上是一个指针,这个指针指向的值是 $c 。
    Olive
        4
    Olive  
       2017-04-17 16:47:23 +08:00
    @ss098 #2 同没有
    ss098
        5
    ss098  
       2017-04-17 16:51:14 +08:00
    @Olive #4 哈哈哈哈,我第一眼看到的时候也是蒙的,然后反应过来了。
    Olive
        6
    Olive  
       2017-04-17 16:52:27 +08:00
    @ss098 #5 哈哈哈
    byfar
        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)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2681 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:06 · PVG 23:06 · LAX 07:06 · JFK 10:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.