gpt4 book ai didi

php - 通过引用传递;为什么原始对象没有改变?

转载 作者:可可西里 更新时间:2023-11-01 13:51:16 26 4
gpt4 key购买 nike

如果在 PHP5 中对象是通过引用传递的,那么为什么下面的 $foo 没有改变?

$foo = array(1, 2, 3);
$foo = (object)$foo;

$x = $foo; // $x = &$foo makes $foo (5)!
$x = (object)array(5);

print_r($foo); // still 1,2,3

所以:

Passing by reference not the same as assign.

那为什么下面的 $foo(100, 2, 3)

$foo = array('xxx' => 1, 'yyy' => 2, 'zzz' => 3);
$foo = (object)$foo;

$x = $foo;
$x->xxx = 100;

print_r($foo);

最佳答案

问题出在这里:

$x = $foo;   
$x = (object)array(5);

在第一条规则中,$x 被引用到 $foo;编辑 $x 也会编辑 $foo;
(这叫做“按引用赋值”,而不是“按引用传递”*1)

$x->myProperty= "Hi";

将使 $foo 也有一个属性“myProperty”。

但在下一行中,您将 $x 引用到一个对象。
从 $foo 中有效取消引用 $x,您对 $x 所做的所有更改都不会传播到 $foo。


*1: 当你调用一个函数时,你传递给函数的对象是(在 php5 中)“通过引用传递”

关于php - 通过引用传递;为什么原始对象没有改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com