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

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

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";
}

为不同的东西(如表达式)声明一个新的临时变量吧,大部分时候性能并不是什么问题,而可读性则非常重要。

(0)

相关推荐

  • PHP学习笔记(二):变量详解

    一.PHP 变量简介 1.语法 复制代码 代码如下: //PHP是弱类型语言,变量类型由存储的值决定 //强类型语言:int a = 1 $变量名 = 值 2.命名规则 1).不能数字开头 2).不能使用PHP运算符(+-x/%&) 3).可以使用PHP关键字 4).区分大小写(php只有变量.常量区分大小写) 5).驼峰命名法:aaBbCc(第一个单词首字母小写) 3.可变变量 变量名可动态设置,例如:$$var 4.引用赋值 复制代码 代码如下: $a=1; $b=&$a; //将$a

  • thinkphp中常用的系统常量和系统变量

    ----------------------------------------模板中使用的系统变量和常量----------------------------------------(1)系统变量:在模板中输出系统变量:包括server.env.session.post.get.request.cookie      {$Think.server.script_name} // 输出$_SERVER变量{$Think.session.session_id|md5} // 输出$_SESSIO

  • PHP 魔术变量和魔术函数详解

    魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例: 复制代码 代码如下: <?php echo '这是第 " '  . __LINE__ . ' " 行'

  • PHP中变量引用与变量销毁机制分析

    本文实例分析了PHP中变量引用与变量销毁机制.分享给大家供大家参考.具体分析如下: 变量是php中一个非常重要的类型了,我们的有数据都通过变量或常量来进行操作,下文来看看变量引用与变量销毁. 在php中,符号"&"表示引用. 1.看看不引用的情况是这样子: 复制代码 代码如下: $a  = "hello world";//定义一个变量,下面赋值给$b $b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a&qu

  • php获取系统变量方法小结

    本文实例讲述了php获取系统变量的方法.分享给大家供大家参考.具体如下: 这里通过一些php内置函数获得各种系统变量. $v = get_defined_vars();//返回由所有已定义变量所组成的数组 print_r($v); // get all defined objects $v = get_object_vars();//返回由对象属性组成的关联数组 print_r($v); // classic phpinfo();//输出关于 PHP 配置的信息 // php版本 (someth

  • php几个预定义变量$_SERVER用法小结

    本文实例总结了php几个预定义变量$_SERVER的用法.分享给大家供大家参考.具体如下: 复制代码 代码如下: <?php echo 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目录,在apache的配置文件里定义:httpd.conf 比如:DocumentRoot "D:/work/php_root" echo 'httphost:'.$_SERVER['HTTP_HOST'].'<br>

  • php魔术变量用法实例详解

    本文实例讲述了php魔术变量用法,其中__DIR__是php5.3新增的,分享给大家供大家参考.具体用法分析如下: 系统常量 __FILE__ 当前文件名 __LINE__ 当前行数 __FUNCTION__ 当前函数名 __CLASS__ 当前类名 __METHOD__ 当前对象的方法名 详细分析 1. __FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径)

  • 对Python 获取类的成员变量及临时变量的方法详解

    利用Python反射机制,从代码块中静态获取参数: co_argcount: 普通参数的总数,不包括参数和*参数. co_names: 所有的参数名(包括参数和*参数)和局部变量名的元组. co_varnames: 所有的局部变量名的元组. co_filename: 源代码所在的文件名. co_flags: 这是一个数值,每一个二进制位都包含了特定信息.较关注的是0b100(0x4)和0b1000(0x8),如果co_flags & 0b100 != 0,说明使用了*args参数:如果co_fl

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

    当一个临时变量被赋值多次时,那么将其拆分成多个,除非它是一个循环计数器. Motivation 临时变量有这多种不同的用途.比如它们可被用作循环中的计数器,在循环中保存结果集,亦或保存一个冗长的表达式的计算结果等等. 这些类型的变量(容器)应该只赋值一次.如果一个同名的临时变量被赋予多个职责,将会影响代码的可读性.这个时候我们应当引入一个新的临时变量以使代码更加清晰易懂. 可能有些注重性能的人会说,引入一个新的变量将会占用更多的内存.的确如此,但是注册一个新的变量不会吸干服务器内存的,这一点请放

  • C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别

    局部变量(Local variables)与 全局变量: 在子程序或代码块中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序或代码块. 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用:在其它地方全局变量起作用. 全局变量在程序开始运行期间就已经在内存中开辟了内存空间,直到程序结束才会释放这块内存空间. 全局变量要在其他文件中使用,需显示的声明这个变量,使用extern关键字声明(extern int

  • php中static 静态变量和普通变量的区别

    php中static 静态变量和普通变量的区别 在变量的前面加上static 就构成了静态变量(static 变量). static变量和普通变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误. static变

  • c++中临时变量不能作为非const的引用参数的方法

    试看下面的代码: #include <iostream> using namespace std; void f(int &a) { cout << "f(" << a << ") is being called" << endl; } void g(const int &a) { cout << "g(" << a << "

  • javascript中的变量作用域以及变量提升详细介绍

    变量作用域"一个变量的作用域表示这个变量存在的上下文.它指定了你可以访问哪些变量以及你是否有权限访问某个变量." 变量作用域分为局部作用域和全局作用域. 局部变量(处于函数级别的作用域)不像其他对面对象的编程语言(比方说C++,Java等等),javascript没有块级作用域(被花括号包围的):当是,javascript有拥有函数级别的作用域,也就是说,在一个函数内定义的变量只能在函数内部访问或者这个函数内部的函数访问(闭包除外,这个我们过几天再写个专题). 函数级别作用域的一个例子

  • C语言中结构体偏移及结构体成员变量访问方式的问题讨论

    c语言结构体偏移 示例1 我们先来定义一下需求: 已知结构体类型定义如下: struct node_t{ char a; int b; int c; }; 且结构体1Byte对齐 #pragma pack(1) 求: 结构体struct node_t中成员变量c的偏移. 注:这里的偏移量指的是相对于结构体起始位置的偏移量. 看到这个问题的时候,我相信不同的人脑中浮现的解决方法可能会有所差异,下面我们分析以下几种可能的解法: 方法1 如果你对c语言的库函数比较熟悉的话,那么你第一个想到的肯定是of

  • 详谈Numpy中数组重塑、合并与拆分方法

    1.数组重塑 1.1一维数组转变成二维数组 通过reshape( )函数即可实现,假设data是numpy.array类型的一维数组array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),现将其转变为2行5列的二维数组,代码如下: data.reshape((2,5)) 作为参数的形状的其中一维可以是-1,它表示该维度的大小由数据本身推断而来,因此上面代码等价于: data.reshape((2,-1)) 1.2二维数组转换成一维数组 将多维数组转换成一维数组的运算通常称为扁

  • Python中py文件引用另一个py文件变量的方法

    最近自己初学Python,在编程是遇到一个问题就是,怎样在一个py文件中使用另一个py文件中变量,问题如下: demo1代码 import requests r = requests.get("http://www.baidu.com") r.encoding = r.apparent_encoding demo = r.text demo beauful1代码: from bs4 import BeautifulSoup soup = BeautifulSoup(demo,"

随机推荐