• 欢迎使用千万蜘蛛池,网站外链优化,蜘蛛池引蜘蛛快速提高网站收录,收藏快捷键 CTRL + D

php引用其他php文件(php输出一张本地图片)


真的是变懒了,一个月一篇的节凑都很难保证了。

最近面试他人的过程中,问了一些关于PHP引用的知识,发现很多同学对这方面知之甚少,还有很多工作中基本没有使用过。甚至有人告诉我要少用引用,引用会带来一些诡异的问题。我心里默默说,避免诡异的问题是要去理解引用而不是少用引用。今天一起来解析解析。

先从一个引用的所谓诡异问题开始。假设我们有这个场景:我们从数据库中读取了一组订单数据,需要把订单的每条数据单独做些处理。

上面的程序会输出如下结果:

这就是经常遇到的一种所谓的诡异问题,先用引用循环处理数据,后面又用了与引用相同的临时变量继续处理数据。这里就是: $item 。很多同学说预防这种问题,就要少用引用。这种态度太消极了,引用在很多地方带来了代码书写的简洁,并且针对大数组使用引用能够节省大量的内存。

现在我们来分析下上面问题出现的原因。先来看引用的定义

那么在这部分代码中

$item 最后跟 $orders[2] 指向了同一个变量内容。并且在 foreach 循环完后, $item 并没有被销毁,因此在后续如果同名的话,会继续生效。图示如下:

那么再接下来的的另一个循环中。

每当 $orders 把变量赋值给 $item 的时候,都同时改变了 $orders[2] 的值。因此才会出现上面诡异的情况。我来逐步给大家演示下:

第一次循环 $orders[0] $item 指向 orderid=123 的订单,由于 $item $orders[2] 的引用,此时导致 $orders[2] 也指向了 orderid=123 的订单;

第二次循环 $orders[1] , $item 指向 orderid=456 的订单,因此 $orders[2] 也指向了 orderid=456

第三次循环 $orders[2] 的时候,明显其值已经变成了 orderid=456 的订单。

通过上面的分析,我相信大家对引用所谓的诡异有了了解。那么又该如何避免这种情况出现呢?其实很简单,每次使用完引用后,记得 unset 调引用。在后面便可毫无顾忌的继续使用了。具体到本例子就是:

前面我说过,引用可以写出简洁的代码。无限级分类的使用便是一个使用场景。比如说我们有个分类的数据:

如果我想得到下面这种形式

如果使用引用,可以非常简单的得出结果。

大家可以试试不用引用的方式,把无限级实现出来试试,比较下代码。

本文链接:https://www.24zzc.com/news/169457063433394.html

相关文章推荐

    无相关信息