PHP中应该避免使用同名变量(拆分临时变量)


Posted in PHP onApril 03, 2015

当一个临时变量被赋值多次时,那么将其拆分成多个,除非它是一个循环计数器。

Motivation

临时变量有这多种不同的用途。比如它们可被用作循环中的计数器,在循环中保存结果集,亦或保存一个冗长的表达式的计算结果等等。

这些类型的变量(容器)应该只赋值一次。如果一个同名的临时变量被赋予多个职责,将会影响代码的可读性。这个时候我们应当引入一个新的临时变量以使代码更加清晰易懂。

可能有些注重性能的人会说,引入一个新的变量将会占用更多的内存。的确如此,但是注册一个新的变量不会吸干服务器内存的,这一点请放心,我们不是活在 386 时代,与其在这些无聊的细枝末节上面搞所谓的优化,不如去优化真正的系统性能瓶颈,比如数据库、网络连接等等,而且清晰易懂的代码更容易被重构,发现 Bug,或者解决性能问题等等。

Example Code

很多时候,我们使用同一个 $temp 变量来计算一个物体的不同属性,这种情况比较常见,比如下面这个例子:

function rectangle($width=1, $height=1) {

    $temp = 2 * ($width + $height);

    echo "Perimter: $temp <br />";

 

    $temp = $width * $height;

    echo "Area: $temp";

}

正如你所看到的,$temp 被使用了两次分别用来计算长方形的周长以及面积。这个例子看起来非常直观清晰,但实际的项目代码可能远比这个例子复杂,如果我们把代码改成下面的样子,这样,不管代码如何复杂都不会有混淆感了。
function rectangle($width=1, $height=1) {

    $perimeter = 2 * ($width + $height);

    echo "Perimter: $perimeter <br />";   

 

    $area = $width * $height;

    echo "Area: $area";

}

为不同的东西(如表达式)声明一个新的临时变量吧,大部分时候性能并不是什么问题,而可读性则非常重要。
PHP 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
php 学习资料零碎东西
Dec 04 PHP
Smarty的配置与高级缓存技术分享
Jun 05 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
php实现单链表的实例代码
Mar 22 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
Laravel框架表单验证详解
Sep 04 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP5多态性与动态绑定介绍
Apr 03 #PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 #PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 #PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 #PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 #PHP
php实现专业获取网站SEO信息类实例
Apr 02 #PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 #PHP
You might like
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
python创建列表并给列表赋初始值的方法
2015/07/28 Python
python Django批量导入不重复数据
2016/03/25 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python3.6编写的单元测试示例
2019/08/17 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
django 多数据库及分库实现方式
2020/04/01 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
神路信息Java面试题目
2013/03/31 面试题
高三学生评语大全
2014/04/25 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
英文感谢信格式
2015/01/21 职场文书
离职信范文
2015/06/23 职场文书
学习心理学心得体会
2016/01/22 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
深入理解go缓存库freecache的使用
2022/02/15 Golang