楠Go随笔

PHP注意事项

2017-11-30 15:53:25 admin 阅读 网站首页 > PHP > 开发心得

PHP引用

PHP中的引用类似于C语言中的指针,可以指向变量的内存地址,相当于给变量取了别名,你修改了该引用的变量值等同于修改了变量的值。有时候这样做会很方便,因为每一个数组元素占用的内存空间大概是普通变量的11倍,随着数组的元素增加消耗的空间也会成倍增加,所以在处理大数组数据的时候我们尽量应该避免新增数组。默认情况下PHP分配的内存空间是128M,如果数组元素上几万个的,内存空间就会被消耗掉,程序无法往下运行。

这个时候引用直接操作变量地址。例如

<?php
    // 初始化索引数组  存放三个元素 a b c      $arr = array(         'a','b','c'     );     //使用引用     foreach ($arr as $key=>&$v){         //使用引用需要 添加 &引用符         # do something 做你的逻辑     }     $v = '定义一个变量';     var_dump($arr);     //不妨尝试下 看会发生什么情况 输出了 a b  定义一个变量     //怎么会这样了 我们一步一步分析     # 1 上面的数组有三个元素 遍历时 循环三遍      # 第一遍 会发生 $v = &$arr[0];  此时数组中第一个元素的变量 让$v引用 这时候$v指向 $arr[0]的内存地址      # 第二遍 会发生 $v = &$arr[1];  此时数组中第二个元素的变量 让$v引用 这时候$v指向 $arr[1]的内存地址     # 第三遍 会发生 $v = &$arr[2];  此时数组中第三个元素的变量 让$v引用 这时候$v指向 $arr[2]的内存地址      //由于循环结束后 $v还在作用域内 因此$v最终指向第三个数组元素的内存地址     //我们在遍历之后 在接下来的代码里 强制对$v赋值 等同于 把值  ‘定义一个变量’ 赋值给数组的第三个元素 数组元素的内容就发生了改变
?>

有些情况下 我们在不经意间使用引用后 还对同名变量操作 这时候就会修改到原来的变量 造成尴尬

为了避免上述情况我们可以用unset函数

unset函数有两个作用

  • 将普通变量销毁

  • 取消变量别名 等同于切断引用

<?php
    foreach ($arr as $key=>&$v){         //使用引用需要 添加 &引用符         # do something 做你的逻辑         unset($v);//切除引用 避免外部调用修改原来的数值     }
?>


搜索

关于楠Go

2015年毕业于吉林大学珠海学院,现今工作已两年有余,2014年在珠海一家游戏公司从事手机游戏开发,后离职转型为网络端PHP工程师,时至今日。熟练掌握PHP面向对象编程网络编程TP框架使用Discuz论坛插件开发。掌握前端框架Bootstrap的使用,掌握JS框架Jquery的使用。已开发多款网站,有着一定基础的开发经验,希望能在互联网领域再上一层楼!

了解更多: 开源中国 ThinkPHP


Powered by MetInfo 5.3.19 ©2008-2018 www.MetInfo.cn