1010011010
V2EX  ›  PHP

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

  •  
  •   1010011010 · Apr 17, 2017 · 2933 views
    This topic created in 3354 days ago, the information mentioned may be changed or developed.

    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 replies    2017-04-18 11:03:11 +08:00
    Liang
        1
    Liang  
       Apr 17, 2017 via iPhone
    指针
    ss098
        2
    ss098  
       Apr 17, 2017
    呃?

    我打开这个页面没有 *1 ,*2 的标识。
    ss098
        3
    ss098  
       Apr 17, 2017
    *1 指的是两个变量都指向了同一个值,只是名字不同

    *2 指的是 $d 通过引用指向了一个值,$d 本质上是一个指针,这个指针指向的值是 $c 。
    Olive
        4
    Olive  
       Apr 17, 2017
    @ss098 #2 同没有
    ss098
        5
    ss098  
       Apr 17, 2017
    @Olive #4 哈哈哈哈,我第一眼看到的时候也是蒙的,然后反应过来了。
    Olive
        6
    Olive  
       Apr 17, 2017
    @ss098 #5 哈哈哈
    byfar
        7
    byfar  
       Apr 18, 2017
    #3 楼正解

    这个特性在很多语言都有 比如:js python

    *1: 表示$a 和$b 这两个变量都指向同一个标识符<id>

    <id>指向(这里可以认为标识符<id>是 new A 这个对象的引用)真正的对象 new A 。

    访问$a 和 $b 都会操作同一个标识符<id>,近而操作到对象 new A 。

    所以他们的操作结果和引用的操作类似,也印证了开头“默认情况下对象是通过引用传递的”这种错误说法。


    *2: 就是引用,指向同一块内存( new A)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   964 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 22:26 · PVG 06:26 · LAX 15:26 · JFK 18:26
    ♥ Do have faith in what you're doing.