直截了当: 我想写一些代码来判断一个变量是否通过引用传递。 例如:
<?php
function isReference($variable) {
//return TRUE if &$something was passed
//return FALSE if $something was passed
}
$text = 'Anything';
$a = isReference(&$text); //return TRUE
$b = isReference($test); //return FALSE
?>
对于那些好奇的人——我为什么需要它? 首先,我不喜欢留下 Unresolved 问题。 其次,我目前正在通过编写 mysqli 的扩展来提高技能,这将准备类似于 PDO 的语句。如果有人知道 PDO 中 bindParam 和 bindValue 之间的区别,他们就会知道这是这个问题的解决方法。我只能制作两个功能,但我想知道是否可以制作一个。
提前致谢。
最佳答案
这是一种不使用 debug_zval_dump
函数的方法:
function isReference($variable) {
$variable = array($variable);
$arg = func_get_arg(0);
$isRef = isset($arg[0]) && $arg === array($variable[0]);
$variable = $variable[0];
return $isRef;
}
注意:只有一种情况下这不起作用:
$text = array(&$text); // although i don't see why such a structure could be used
isReference($text); // will wrongly return false
显然,您可以使用随机唯一 key (而不是 0
)绕过此限制。
关于php - 如何检查变量是否在PHP中通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21958610/