经过一番头疼之后,这里有一个函数可以检查两个变量 $a,$b 之间,其中一个是否是对另一个的引用。
这意味着它们“指向”同一个值。
在以下版本上测试
PHP 7.2.2 (cli) (built: Jan 31 2018 19:31:17) ( ZTS MSVC15 (Visual C++ 2017) x64 )
希望有帮助...
<?php
function are_references(&$a, &$b){
$mem = $a; $a = uniqid ("REFERENCE???", true ); $same = $a === $b; $a = $mem; return $same;
}
echo "*** 不同的变量和不同的值\n";
$a = "toto";
$b = "tata";
var_dump($a, $b, are_references($a, $b));
echo "验证原始值: $a, $b\n";
echo "*** 不同的变量,但相同的的值\n";
$a = "toto";
$b = "toto";
var_dump($a, $b, are_references($a, $b));
echo "验证原始值: $a, $b\n";
echo '*** $b 是 $a 的引用'."\n";
$a = "titi";
$b = &$a;
var_dump($a, $b, are_references($a, $b));
echo "验证原始值: $a, $b\n";
echo '*** $a 是 $b 的引用'."\n";
$b = "titi";
$a = &$b;
var_dump($a, $b, are_references($a, $b));
echo "验证原始值: $a, $b\n";
?>
结果
*** 不同的变量和不同的值
string(4) "toto"
string(4) "tata"
bool(false)
验证原始值: toto, tata
*** 不同的变量,但相同的的值
string(4) "toto"
string(4) "toto"
bool(false)
验证原始值: toto, toto
*** $b 是 $a 的引用
string(4) "titi"
string(4) "titi"
bool(true)
验证原始值: titi, titi
*** $a 是 $b 的引用
string(4) "titi"
string(4) "titi"
bool(true)
验证原始值: titi, titi