PHP代码执行分析求助:新手不解变量c、d值变化原因
关于PHP变量c、d值变化及输出结果的详细解释
嘿,兄弟,作为PHP新手碰到变量莫名变值确实头大!虽然你没贴出具体代码,但根据你说的输出结果The dog stood on the donkey和变量c、d值发生变化的情况,我猜你大概率是踩了PHP里值传递和引用传递的坑——这可是新手最容易懵的点之一,我给你掰扯清楚:
先还原一个最匹配你描述的代码场景
我先写一段符合你情况的代码,你看看是不是和你手里的一样:
$a = "The dog"; $b = "stood on the donkey"; // 值传递:把$a的内容复制一份给$c,两者完全独立 $c = $a; // 引用传递:$d不复制内容,直接指向$a的内存存储位置 $d = &$a; // 修改$a的值 $a = $b; // 输出结果 echo "$c $d";
运行这段代码,输出就是你看到的The dog stood on the donkey,而且你会发现:
$c还是最初的The dog$d变成了stood on the donkey,和修改后的$a完全一致
核心原因:两种变量传递方式的本质区别
值传递(普通赋值)
当你写$c = $a时,PHP会在内存里开辟一块新空间,把$a的内容原封不动复制给$c。这时候$a和$c就像两个一模一样的独立副本,修改其中一个,另一个完全不受影响——就像你复印了一份文档,改原件根本不会影响复印件。引用传递(带&符号的赋值)
当你写$d = &$a时,PHP不会复制任何内容,而是让$d直接“绑定”到$a所在的内存地址。这时候$a和$d其实是同一份数据的两个“别名”,不管你改哪个,本质上都是修改内存里的同一份内容——就像你给同一个人起了两个外号,喊其中一个外号让他做事,另一个外号对应的还是同一个人。
对应到你的输出结果
$c是值传递来的,所以哪怕后来$a被改成了$b的值,$c依然保留最初的The dog$d是引用传递来的,$a变成$b的值后,$d自然也跟着变成了stood on the donkey- 最后把
$c和$d拼接输出,就得到了你看到的The dog stood on the donkey
如果你的代码不是这个场景,随时把具体代码贴出来,我再给你针对性分析!
内容的提问来源于stack exchange,提问作者Sotiris Tsepelakis
相关产品推荐
相关产品推荐

