php的循环与引用的一个坑】的更多相关文章

上代码 $arr = array( 'a'=> 'a11', 'b'=> 'b22', 'c'=> 'c33', ); foreach ($arr as $k=>&$v){ // Do somethind } foreach ($arr as $k=>$v){ var_dump($v); } 这样的代码, var_dump 会输出什么?  各位可以试试, 答案 string(3) "a11" string(3) "b22" st…
From: http://blog.csdn.net/yipiankongbai/article/details/45307767 先来看看下面这段代码: <?php $arr = array('apple','banana','cat','dog'); foreach($arr as $key=>$val) { //some code } echo $val; //输出dog echo $key; //输出3 //下面对val进行赋值 $val = 'e'; print_r($arr); /…
前言 最近实现某个业务时,需要读取数据然后再异步处理:在 Go 中实现起来自然就比较简单,伪代码如下: list := []*Demo{{"a"}, {"b"}} for _, v := range list { go func() { fmt.Println("name="+v.Name) }() } type Demo struct { Name string } 看似非常简单几行代码却和我们的预期不符,打印之后输出的是: name=b na…
我原来以为PHP中的and和&&是一样的, 只是写法上为了可读性和美观, 事实上我错了. 这里面深藏了一个坑! 看以下代码: $bA = true; $bB = false; $b1 = $bA and $bB; $b2 = $bA && $bB; var_dump($b1); // $b1 = true var_dump($b2); // $b2 = false $bA = false; $bB = true; $b3 = $bA or $bB; $b4 = $bA ||…
循环强引用还会发生在当你将一个闭包赋值给类实例的某个实例,并且这个闭包体中又实用了这个类实例.这个闭包体重可能访问了实例的某个属性,例如self.**,或者闭包中调用了实例的某个方法,例如self.**,这两种情况都导致闭包“捕获”self,从而产生了循环强引用. 循环强引用的产生,是因为闭包和类相似,都是引用类型.当你把闭包赋值给某个属性时,你也把一个引用赋值给了这个闭包.实质上,这跟之前的问题一样,两个强引用让彼此一直有效.但是,和两个类实例不同,这次一个是类实例,另一个是闭包. Swift…
Swift使用自动引用计数(ARC)来管理应用程序的内存使用.在大多是情况下,并不需要考虑内存的管理.当实例不再需要的时候,ARC会自动释放这些实例所使用的内存. 但ARC并不是绝对安全的.下面两种情况会发生内存泄露. 1,类实例之间的循环强引用 两个类实例都有一个强引用指向对方,这样的情况就是强引用循环,从而导致内存泄露. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32…
去年我参加了很多次会议,其中八次会议里我进行了相关发言,这其中我多次谈到了 PHP 的引用问题,因为很多人对它的理解有所偏差.在深入讨论这个问题之前,我们先回顾一下引用的基本概念,明确什么是"引用传递". 在 PHP 中引用意味着用不同的名字访问同一个变量内容,不论你用哪个名字对变量做出了运算,其他名字访问的内容也将改变. 让我们通过代码来加深对此的理解. 首先我们写几个简单的语句,把一个变量赋值给另一个变量,并且改变另一个变量: <?php $a = 23; $b = $a;…
foreach($arr as &$value)1.引用赋值符号&,是每次循环的时候,把当前元素变成地址,$value变量就是对应元素的地址,循环结束$value是一个指向最后一个元素的地址2.当我下次循环,使用了这种方式foreach($arr as $value) ,会出现问题;foreach会把每个元素赋值给后面的$value变量3.因此,逻辑就变成了,把每个元素修改给原数组的最后一个元素,最后一次循环会一直是前一次的结果4.最好不用引用传递,用这种形式$arr[$key]改原数组,…
概述 今天我碰到 fabric 和 ssh 的一个坑,记录下来,供以后开发时参考,相信对其他人也有用. ssh 今天用 ssh 登录远程服务器用不了 npm,查了下,发现原因是: ssh登录时不会加载 .bashrc 而是加载 .bash_profile,所以以ssh的默认登录不会是 bash ,需要在 .bash_profile 中添加以下代码: if [ -f ~/.bashrc ]; then . ~/.bashrc fi fabric 我赶了一件蠢事就是把 .bash_profile 文…
dcef3 指出一个坑 http://ju.outofmemory.cn/entry/80119 BccSafe's Blog 2014-06-11 2388 阅读   dcef3提供了TChromium,可能会有人想用这个来开发游览器 可惜这个实现起来有问题 问题就出在OnBeforePopup这个事件上 很多人以为只要在这做一个拦截 让新的TChromium来加载这个新网页即可 这是一个大坑,我之前发布的游览器也是这样 get可能表面上还看不出什么问题, 但如果是个post请求,问题就大了…