代码之家  ›  专栏  ›  技术社区  ›  Derek Illchuk

php:获取引用ID

php
  •  2
  • Derek Illchuk  · 技术社区  · 16 年前

    如何获取php引用ID,尽可能使用 var_dump 功能:

    // PHP 5.2.6
    class Test {}
    
    $test1 = new Test; var_dump($test1);
    $test1b = $test1;  var_dump($test1b);
    $test2 = new Test; var_dump($test2);
    

    导致:

    object(Test)#1 (0) {}
    object(Test)#1 (0) {}
    object(Test)#2 (0) {}
    


    看, 变量转储 在没有直接比较的情况下,可以判断哪些引用是相等的,并打印它们的引用ID #1 #2 . 如何做 访问该引用ID?

    3 回复  |  直到 16 年前
        1
  •  9
  •   Pascal MARTIN    16 年前

    我想解决办法是 spl_object_hash :

    此函数返回一个唯一的 对象的标识符。这个身份证可以 用作存储的哈希键 对象或用于识别对象。

    这不是一个“简单”的数字 var_dump 但我想这总比什么都没有好…


    例如,利用这部分代码,从您的代码中获得灵感:

    $test1 = new Test;
    $test1b = $test1;
    $test2 = new Test;
    
    echo spl_object_hash($test1) . '<br />';
    echo spl_object_hash($test1b) . '<br />';
    echo spl_object_hash($test2) . '<br />';
    

    我得到这个输出:

    000000002c836d1d000000006bfbdc77
    000000002c836d1d000000006bfbdc77
    000000002c836d1e000000006bfbdc77
    
        2
  •  3
  •   mr-sk    16 年前

    我并不骄傲,但这很管用:

    ob_start();                                                                                                                                   
    var_dump($test2);                                                                                                                             
    $str = ob_get_contents();                                                                                                                     
    ob_end_clean();                                                                                                                               
    
    echo substr($str, strrpos($str, '#')+1, 1);  
    
        3
  •  0
  •   Maurice Kherlakian    16 年前

    不完全确定您是否只想获取引用ID来比较2个实例并确保它们相等。 如果是这种情况,可以使用“===”运算符。

    $test1 === $test1b will be true whereas $test1 === $test2 will be false.
    
    推荐文章