我希望能够查询我的程序变量作为参考的变量。有没有办法做到这一点?我查看了所有常见的来源,找不到任何东西,也许我的搜索条件很傻。感谢。
答案 0 :(得分:3)
您只需将引用与===运算符
进行比较即可注意:这只会比较对象引用。
$obj1 = new DateTime();
$obj2 = $obj1;
if($obj2 === $obj1){
echo "Equal";
}else {
echo "Not Equal";
}
// Outputs Equal
$obj2 = new DateTime();
if($obj2 === $obj1){
echo "Equal";
}else {
echo "Not Equal";
}
// Outputs Not Equal
答案 1 :(得分:0)
我个人知道的唯一代码是直接查询类的内容,而不是检索它:
if($var instanceof Your_Class) { }
如果你知道变量严格来说是一个类,你可以使用:
get_class();
如果在非对象上使用该函数,则它似乎返回E_WARNING。我建议这样的代码:
$class_known = false;
if(is_object($class))
{
$class_name = get_class($class);
$class_known = false;
}
if($class_known)
{
echo $class_name;
}
答案 2 :(得分:0)
如果您正在处理对象,我相信===
会执行您想要的测试。
$obj1 = new Object;
$obj2 = $obj1;
echo ($obj1 === $obj2) ? 'same' : 'not same'; // same
$obj2 = new Object;
echo ($obj1 === $obj2) ? 'same' : 'not same'; // not same
答案 3 :(得分:0)
据我所知,没有直接的方法来测试两个变量是否指向同一个东西。这样的事情可能有用:
function is_reference_of(&$a, &$b)
{
// if an object, use strict comparison
if (is_object($a)) return $a === $b;
// definitely not a reference to each other if they aren't the same value
if ($a !== $b) return false;
$tmp = $a;
if (is_array($a))
{
$a = 0;
// if $b is no longer an array, then it must be a reference to $a
$is_ref = !is_array($b);
}
else
{
$a = !$a;
// if $b is no longer equal to $tmp, then it must be a reference to $a
$is_ref = ($b !== $tmp);
}
// make sure to reset $a back to what it was
$a = $tmp;
return $is_ref;
}
$a = 0;
$b = 0;
is_reference_of($a, $b); // false
$b = &$a;
is_reference_of($a, $b); // true
巨大的免责声明:我没有仔细考虑过这个问题。做上述事情可能会产生各种各样的副作用。考虑一下这只是一个让你入门的概念证明
如果你总是使用数组或类,你可以尝试在一个中设置临时字段或属性,看看它是否存在于另一个中,等等。上面的代码改变了整个变量。
请注意,上述函数中参数的顺序无关紧要。
更新:使用对象,您可以使用===
并完全跳过该功能。我稍微更新了函数,以检测正在测试的变量类型并做出相应的反应。免责声明仍然适用。