在php中有像is_reference_of这样的函数吗?

时间:2011-04-09 05:53:51

标签: php variables reference

我希望能够查询我的程序变量作为参考的变量。有没有办法做到这一点?我查看了所有常见的来源,找不到任何东西,也许我的搜索条件很傻。感谢。

4 个答案:

答案 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

巨大的免责声明:我没有仔细考虑过这个问题。做上述事情可能会产生各种各样的副作用。考虑一下这只是一个让你入门的概念证明

如果你总是使用数组或类,你可以尝试在一个中设置临时字段或属性,看看它是否存在于另一个中,等等。上面的代码改变了整个变量。

请注意,上述函数中参数的顺序无关紧要。

更新:使用对象,您可以使用===并完全跳过该功能。我稍微更新了函数,以检测正在测试的变量类型并做出相应的反应。免责声明仍然适用。