PHP参考-混乱

PHP参考-混乱,php,pass-by-reference,php-5.6,Php,Pass By Reference,Php 5.6,我发现下面代码中的引用令人困惑 $a = 4; $b = &$a; var_dump($b); $a = 10; var_dump($b); // 10 $b = 100; var_dump($a); // 100 but shouldn't it be 10? $b的值是对$a的引用,$a是对$b的引用 但是当我更改$b的值时,为什么要这样做呢。$a的值也会改变?行中:$b=&a变量$b被设置为对$a的引用(如中所示,它将指向与$b相同的内存位置)。在这方面,$b实质上成为一个别

我发现下面代码中的引用令人困惑

$a = 4;
$b = &$a;
var_dump($b);

$a = 10;
var_dump($b); // 10

$b = 100;
var_dump($a); // 100 but shouldn't it be 10?
$b
的值是对
$a
的引用,
$a
是对
$b
的引用


但是当我更改
$b
的值时,为什么要这样做呢。
$a
的值也会改变?

行中:
$b=&a
变量
$b
被设置为对
$a
的引用(如中所示,它将指向与
$b
相同的内存位置)。在这方面,
$b
实质上成为一个别名或访问和修改
$a
的另一种方式

这解释了C++中的指针(强调这不是C++,但链接很好地解释指针/引用)是重要的。


我希望这能有所帮助。

$b=&a
表示它们的值相等如果定义
$b
,则
$a
值将分别与
$b
的值相等


我也很困惑,但我认为这是因为“C编程”。在C语言中,它会像您期望的那样工作,但在PHP中,它可能会有所不同。。。在C中,“$b”将只包含“$a”的地址,因此如果您更改“$b”,它将不再包含“$a”的地址……这就是我认为在PHP中应该包含的地址!这不明显!这一定是因为PHP中没有类型。。。在C语言中,将“*”添加到类型中,表示它将是一个指针。在这里,当您声明“$b”时,它将是一个与“$a”地址相同的变量,而不是一个包含“$a”地址的变量……因此它们实际上是相互指向的——换句话说——在PHP中?它们不是相互指向的,
$b
是指向
$a
。在内存中,
$a
将保存100的值,
$b
将保存
$a
的内存地址的值。它的字面意思是“指向”
$a
。为什么$100的值是100?它没有指向任何东西,不是吗?但我指出,OP似乎确切地知道指针在C/C++中是如何工作的,这就是为什么他感到困惑的原因……他支持使用
别名。这是在PHP中定义引用的一种非常好的方法。