如何在php中检查变量的内存位置?
由于
答案 0 :(得分:9)
如果您需要知道$ varA是否是对$ varB的引用,那么您运气不好:PHP内部不会向开发人员提供此信息。
但是,您可以通过解析var_dump或debug_zval_dump()的输出来提取有关引用的一些信息。阅读相关的手册部分,有关详细信息,请参阅this question。
Derick Rethans准备好this (PDF) article关于PHP中的引用。
使用debug_zval_dump()时要注意引用计数,因为该函数总是在其自身内创建一个额外的引用,将值递增1
答案 1 :(得分:6)
如果您需要知道变量是否是对另一个变量的引用,那么debug_zval_dump()是唯一的选择。
答案 2 :(得分:4)
答案 3 :(得分:4)
要测试一个变量是否是对另一个变量的引用,您可以执行以下操作:
function is_ref_to(&$a, &$b)
{
$t = $a;
if($r=($b===($a=1))){ $r = ($b===($a=0)); }
$a = $t;
return $r;
}
答案 4 :(得分:3)
我很确定这在PHP中是不可能的。您可以创建一个扩展来执行此操作,但我看不到任何用途。内存地址在PHP脚本中是无用的,因为解释器处理所有内部变量工作。在PHP之外(比如使用C或C ++操作内存地址)至少可以说是危险的。如果您在执行PHP脚本时修改了PHP脚本使用的内存地址,我希望您可能会崩溃脚本以及可能的解释器。 但是,如果您正在寻找PHP中的内部指针,请查看references。可能需要一些读取来包围它们,但如果您需要通过引用传递,请查看它们。快速举例:
<?php
function change( &$name ) { $name = "Yosef" }
$name = "John";
change( $name );
echo $name;
?>
答案 5 :(得分:1)
正如其他人所说,API没有公开检索值的地址的方法。但是,给定两个变量,您可以比较两个值的地址。这是一个测试两个变量是否引用相同值的函数:
function vars_reference_same_value(&$a, &$b)
{
$not_b = $b === 0 ? 1 : 0;
$a_orig = $a;
$a = $not_b;
$is_ref = $b === $not_b;
$a = $a_orig;
return $is_ref;
}
(这与@infinity's answer相同,但也许更容易理解。)