自我介绍:大家好,我是王笨笨,很高兴认识大家,大家可以叫我狗蛋儿。
我便是我,不一样的烟火。

生涩的观点:引用便是别名,多个名字指向同一个变量内容,没有重复冗余的内存开销。

$a = 'runBaby';$b = &$a;var_dump($a,$b);/ string(7) \"大众runBaby\"大众 string(7) \"大众runBaby\"大众 /如何完美演绎BUG

bug:由于我们缺点利用,导致缺点。
我们的事情是什么:写bug,找bug,改bug

bugphp若何应用PHP 引用写出BUG Vue.js

无限循环···

背景:

PHP一样平常是web做事,在要求结束后会开释所有的资源,以是PHPer一样平常不用关心内存的开释。
但是必须要重视,鸟哥说过:请手动开释你的资源(Please release resources manually)

鸟哥语录:如果你买了一本PHP的书, 它见告你: “不用在PHP主动开释资源, 由于PHP会帮你开释”的话, 我建议你, 烧了它.

鸟哥语录:版权归鸟哥所有

虽然,在要求结束之后资源就自动开释了,我们不用太担心内存泄露。
但是在要求中,如果没有即时开释引用,那么引用将一贯存在。

复现:

<?php$array = array( array( 'id'=>'A', ), array( 'id'=>'B', ), array( 'id'=>'C', ), array( 'id'=>'D', ));foreach ($array as &$value){ if($value['id'] == 'D'){ $value = 'DD'; }}$new_array = array();foreach ($array as $key =>$value){ $new_array[$key] = $value;}var_dump($new_array);die;

预期数据:

预期数据

打印信息:

bugInfo

实际数据和预期的有些差别啊 ,为什么末了一个重复了,不符合牛顿力学啊

忧郁小仔

前面实际已经埋下了伏笔,问题涌如今:引用没有开释。

第一个遍历:利用变量 $value

第二个遍历:利用变量 $value (同一个变量)

详解:(心途经程)

心途经程

代码

$array = array( array( 'id'=>'A', ), array( 'id'=>'B', ), array( 'id'=>'C', ), array( 'id'=>'D', ),);foreach ($array as &$value){ if($value['id'] == 'D'){ $value['id'] = 'DD'; }}$new_array = array();foreach ($array as $key =>$value){ $new_array[$key] = $value; //数据 var_dump($array);}

仔细不雅观察打印数据,创造$array[3],一贯在变革,A -> B -> C -> C

变、变、变···看我七十二变

分拆步骤:

//流程://第一遍 $value = $new_array[0] ,但引用未开释,$value 实际还是 $array[3] , 此时 $array[3] = $new_array[0] 结果:A 、B、C、A//第二遍 $value = $new_array[1] ,但引用未开释,$value 实际还是 $array[3] , 此时 $array[3] = $new_array[1] 结果:A 、B、C、B//第三遍 $value = $new_array[2] ,但引用未开释,$value 实际还是 $array[3] , 此时 $array[3] = $new_array[2] 结果:A 、B、C、C//第四遍 $value = $new_array[3] ,但引用未开释,$value 实际还是 $array[3] , 此时 $array[3] = $new_array[3] 结果:A 、B、C、C

一首小曲总结:

想得却不可得 你奈人生何

该舍的舍不得 只顾著跟往事瞎说

等你创造程序是错了 它早已偷光你的选择

~~~~

该来的我不推 该还的还 该给的我给

bug 你别催 调完就OK

及时unset,解除引用操作,避免问题涌现,让我们阔别bug,

让bug都随风,都随风,我心随你动~~~

unset($value); //舍得

左手代码,右手诗,意见意义学习新知识