如何判断 PHP 变量是不是为引用变量

Posted

技术标签:

【中文标题】如何判断 PHP 变量是不是为引用变量【英文标题】:How To Tell If A PHP Variable is a Reference Variable [duplicate]如何判断 PHP 变量是否为引用变量 【发布时间】:2011-12-11 20:28:16 【问题描述】:

可能重复:Detecting whether a php variable is a reference / referenced

我想知道是否有一个函数可以告诉我变量是否是引用变量。如果没有具体的函数,有没有办法判断是不是引用变量?

【问题讨论】:

我认为没有内置函数可以检查变量是否为引用。 有趣的问题,但我想知道用例是什么。 用例是用于调试意外更改的变量。 如果是调试用,var_dump就行了。 【参考方案1】:

您可以使用debug_zval_dump 确定这一点。看我的回答on another question。

【讨论】:

如果您在另一个问题上回答过这个问题,为什么要在这里回答?【参考方案2】:

从user examples 看来没有直接的方法,但您会在那里找到解决方案。

【讨论】:

【参考方案3】:

您可以在 PHP 文档中尝试使用 this function from one of the commenters。但是 afaik 没有内置函数可以检查 var 是否为引用 var。

【讨论】:

【参考方案4】:
<?php
$a = 1;
$b =& $a;
$c = 2;
$d = 3;
$e = array($a);
function is_reference($var)
    $val = $GLOBALS[$var];
    $tmpArray = array();
    /**
     * Add keys/values without reference
     */
    foreach($GLOBALS as $k => $v)
        if(!is_array($v))
            $tmpArray[$k] = $v;
        
    

    /**
     * Change value of rest variables
     */
    foreach($GLOBALS as $k => $v)
        if($k != 'GLOBALS'
            && $k != '_POST'
            && $k != '_GET'
            && $k != '_COOKIE'
            && $k != '_FILES'
            && $k != $var
            && !is_array($v)
        )
            usleep(1);
            $GLOBALS[$k] = md5(microtime());
        
    

    $bool = $val != $GLOBALS[$var];

    /**
     * Restore defaults values
     */
    foreach($tmpArray as $k => $v)
        $GLOBALS[$k] = $v;
    

    return $bool;

var_dump(is_reference('a'));
var_dump(is_reference('b'));
var_dump(is_reference('c'));
var_dump(is_reference('d'));
?>

这是来自the PHP documentation 的示例。

【讨论】:

以上是关于如何判断 PHP 变量是不是为引用变量的主要内容,如果未能解决你的问题,请参考以下文章

完全理解PHP中的变量引用

JVM那些事儿-如何判断对象是不是为垃圾(四)

php权威编程有趣部分

php中的全局变量引用

如何判断一个对象是不是被释放掉 C#

如何通过在 PHP 中通过引用传递变量来存储变量?