如何检查php中变量的内存位置?
如何检查php中变量的内存位置如何检查php中变量的内存位置?,php,Php,如何检查php中变量的内存位置 谢谢对不起,这是不可能的[1] 它们不像C指针;对于 实例,则无法执行指针 使用它们的算术 [1] 如果您需要知道一个变量是否是对另一个变量的引用,那么这是唯一的选择。我很确定这在PHP中是不可能的。您可能可以创建一个扩展来实现这一点,但我看不出它有什么用处。内存地址在PHP脚本中是无用的,因为解释器处理所有内部变量的工作。在PHP之外(比如用C或C++操作内存地址),至少可以说是危险的。如果您在PHP脚本执行时修改了它所使用的内存地址,我预计您可能会使脚本和解释
谢谢对不起,这是不可能的[1] 它们不像C指针;对于 实例,则无法执行指针 使用它们的算术
[1] 如果您需要知道一个变量是否是对另一个变量的引用,那么这是唯一的选择。我很确定这在PHP中是不可能的。您可能可以创建一个扩展来实现这一点,但我看不出它有什么用处。内存地址在PHP脚本中是无用的,因为解释器处理所有内部变量的工作。在PHP之外(比如用C或C++操作内存地址),至少可以说是危险的。如果您在PHP脚本执行时修改了它所使用的内存地址,我预计您可能会使脚本和解释器崩溃。
但是,如果您正在寻找PHP中的内部指针,请查看。你可能需要读几遍才能理解它们,但如果你需要通过引用来传递,请仔细阅读它们。快速示例:
<?php
function change( &$name ) { $name = "Yosef"; }
$name = "John";
change( $name );
echo $name;
?>
如果您需要知道$varA是否是$varB的引用,那么您就走运了:PHP内部程序没有向开发人员提供此信息 但是,您可以通过解析var_dump或debug_zval_dump()的输出来提取有关引用的一些信息。请阅读相关手册章节,有关详细信息,请参阅 并准备了Derick Rethans关于PHP中引用的详细信息
在使用debug_zval_dump()时,请注意refcount,因为该函数始终在自身内创建一个附加引用,将该值增加1。要测试一个变量是否引用另一个变量,可以执行以下操作:
function is_ref_to(&$a, &$b)
{
$t = $a;
if($r=($b===($a=1))){ $r = ($b===($a=0)); }
$a = $t;
return $r;
}
正如其他人所说,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;
}
(这与相同,但可能更容易理解。)是的,我需要,例如,如果我想知道变量是其他变量的副本还是指向同一变量的指针,那么当你需要时,你的设计就被破坏了。公平地说,与@Gordon的副本相关,他可能在非传统环境中使用PHP,在这种环境中他必须知道数据的内存地址。他可能没有设计这个系统…也许这可以帮助你=D:这比上更详细的代码(看起来做同样的事情)好吗?谢谢你的文章链接!从未听说过
debug\u zval\u dump()
。非常有趣,谢谢!