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 相关文章推荐
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
echo, print, printf 和 sprintf 区别
Dec 06 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP程序员的技术成长规划
Mar 25 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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
透析PHP的配置文件php.ini
2006/10/09 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
PHP连接MYSQL数据库实例代码
2016/01/20 PHP
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
浅谈js的异步执行
2016/10/18 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python hook监听事件详解
2018/10/25 Python
Python实现分段线性插值
2018/12/17 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
计算机开发个人求职信范文
2013/09/26 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
责任书范本
2014/08/25 职场文书
小学教师党员承诺书
2015/04/27 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
人与自然观后感
2015/06/16 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书