【问题标题】:PHP reference - The confusionsPHP 参考 - 困惑
【发布时间】:2015-10-05 12:40:25
【问题描述】:

我发现下面代码中的引用比较混乱,

$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 的值也变了?

【问题讨论】:

  • 我也很困惑,但我认为这是因为“C 编程”。在 C 中,它会像你期望的那样工作,但在 PHP 中,它可能会有所不同...... '不再包含“$a”的地址...
  • 这就是我认为它应该在 PHP 中的内容!不是很明显!
  • 这一定是因为PHP中没有类型...在C中,您在类型中添加“*”,表示它将是一个指针。这里,当你声明“$b”时,它将是一个与“$a”地址相同的变量,而不是一个包含“$a”地址的变量...

标签: php pass-by-reference php-5.6


【解决方案1】:

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

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

我希望这会有所帮助。

【讨论】:

  • 所以他们实际上是在用另一种说法相互指向 - 在 PHP 中?
  • 它们没有指向对方,$b 指向的是$a。在内存中,$a 将保存 100 的值,$b 将保存$a 的内存地址的值。它从字面上“指向”$a
  • 为什么 100 美元会有 100 的价值?它没有指向任何东西,不是吗?
  • 但我指出 OP 似乎确切地知道指针在 C/C++ 中是如何工作的,这就是他感到困惑的原因......
  • 赞成使用alias。这是在 PHP 中定义引用的好方法。
【解决方案2】:

$b = &$a;表示它们的值相等,如果你定义$b,那么$a的值就等于$b的值。

Check out this link for more information

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多