PHP引用为何如此容易造成陷阱,使用时需格外小心?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3158个文字,预计阅读时间需要13分钟。
前言:去年我参加了多次会议,其中八次会议上我进行了相关发言。其中,我多次谈到PHP的引用问题,因为很多人对它的理解存在偏差。
在深入讨论这个问题之前,我们先回顾一下。
前言
去年我参加了很多次会议,其中八次会议里我进行了相关发言,这其中我多次谈到了 PHP 的引用问题,因为很多人对它的理解有所偏差。在深入讨论这个问题之前,我们先回顾一下引用的基本概念,明确什么是“引用传递”。
在 PHP 中引用意味着用不同的名字访问同一个变量内容,不论你用哪个名字对变量做出了运算,其他名字访问的内容也将改变。
让我们通过代码来加深对此的理解。 首先我们写几个简单的语句,把一个变量赋值给另一个变量,并且改变另一个变量:
<?php $a = 23; $b = $a; $b = 42; var_dump($a); // int(23) var_dump($b); // int(42)
这个脚本显示 $a 值仍然为 23 ,而 $b 则等于 42 。出现这个情况的原因是我们得到的是一个拷贝(具体发生了什么稍后讲解。。。)现在我们使用引用来做同样的事情:
<?php $a = 23; $b = &$a; $b = 42; var_dump($a); // int(42) var_dump($b); // int(42) ?>
现在 $a 的值也改变成了 42 。 事实上,$a 和 $b 之间没有任何区别,它们都使用了同一个变量容器(又名: zval )。 将这两者分开的唯一方法是使用 unset() 函数销毁其中任何一个变量。
本文共计3158个文字,预计阅读时间需要13分钟。
前言:去年我参加了多次会议,其中八次会议上我进行了相关发言。其中,我多次谈到PHP的引用问题,因为很多人对它的理解存在偏差。
在深入讨论这个问题之前,我们先回顾一下。
前言
去年我参加了很多次会议,其中八次会议里我进行了相关发言,这其中我多次谈到了 PHP 的引用问题,因为很多人对它的理解有所偏差。在深入讨论这个问题之前,我们先回顾一下引用的基本概念,明确什么是“引用传递”。
在 PHP 中引用意味着用不同的名字访问同一个变量内容,不论你用哪个名字对变量做出了运算,其他名字访问的内容也将改变。
让我们通过代码来加深对此的理解。 首先我们写几个简单的语句,把一个变量赋值给另一个变量,并且改变另一个变量:
<?php $a = 23; $b = $a; $b = 42; var_dump($a); // int(23) var_dump($b); // int(42)
这个脚本显示 $a 值仍然为 23 ,而 $b 则等于 42 。出现这个情况的原因是我们得到的是一个拷贝(具体发生了什么稍后讲解。。。)现在我们使用引用来做同样的事情:
<?php $a = 23; $b = &$a; $b = 42; var_dump($a); // int(42) var_dump($b); // int(42) ?>
现在 $a 的值也改变成了 42 。 事实上,$a 和 $b 之间没有任何区别,它们都使用了同一个变量容器(又名: zval )。 将这两者分开的唯一方法是使用 unset() 函数销毁其中任何一个变量。

