php 中return ,require ,include
include和contain加括号和不加括号的区别2010年6⽉30⽇
php 中return ,require ,include 加括号和不加括号的区别
在整理代码规范的时候看到这么⼀句,return 返回值尽量不要加括号,这个是什么原因呢。
查阅官⽅⼿册,在中发现这么⼀句:
翻译成中⽂的意思是:
注意: 当⽤引⽤返回值时永远不要使⽤括号,这样⾏不通。只能通过引⽤返回变量,⽽不是语句的结果。你只能返回引⽤的变量,⽽不是使⽤⼀个表达式的结果。如果使⽤ return ($a); 时其实不是返回⼀个变量,⽽是表达式 ($a) 的值(当然,此时该值也正是 $a  的值)。这句话⼤家可能还不是很理解,看看下⾯的测试代码:
1
2
3
4
5
6
7
8
9
10
11
12<?php $good  = 'good chuzhi'; $_SERVER ['HTTP_HOST'] = 'hao'; function &changeVariable () { return  $_SERVER ['HTTP_HOST'];    }  $good  =&changeVariable (); var_dump ($good ); $_SERVER ['HTTP_HOST'] = 'good';var_dump ($good ,$_SERVER ['HTTP_HOST']);
这段代码输出:
string(3) “hao”
string(4) “good”
string(4) “good”
如果在返回变量中加括号,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12<?php $good  = 'good chuzhi'; $_SERVER ['HTTP_HOST'] = 'hao'; function &changeVariable () { return  ($_SERVER ['HTTP_HOST']);    }  $good  =&changeVariable (); var_dump ($good ); $_SERVER ['HTTP_HOST'] = 'good';var_dump ($good ,$_SERVER ['HTTP_HOST']);
这段代码输出:
string(3) “hao”
string(3) “hao”
string(4) “good”
第⼀个例⼦中“return $_SERVER['HTTP_HOST']”;没有加引号,返回的是$_SERVER['HTTP_HOST']的引⽤,这时$good 和$_SERVER['HTTP_HOST']指向同⼀个变量。所以修改了$_SERVER['HTTP_HOST'],$good 的值跟着变化。
⽽第⼆个例⼦ 如果return 后⾯的变量加了括号,则⾸先计算括号括起来的这个表达式的值,然后返回计算后的结果。这样$good 指向”($_SERVER['HTTP_HOST'])”计算的结果,和$_SERVER['HTTP_HOST']指向的变量不是⼀样,⾃然修改了
$_SERVER['HTTP_HOST']的值,$good 的值保持不变。所以为了保险,return 返回值是能不加括号就不加括号。从上⾯的列⼦可以推知require include 后⾯加括号和不加括号的区别:
include “a.php”;  //直接将a.php 包含进来
include(“a.php”);//⾸先计算’(“a.php”)’的值,其结果肯定是a.php,然后在include “a.php”
require的道理和include⼀模⼀样。
因此,include和require后⾯的⽂件路径加不加引号对执⾏结果是没有影响的(不存在引⽤的问题),但是增加了执⾏步骤,降低了效率。综合以上的分析,⽆论是include,require还是return,对于这样的操作符,后⾯能不加括号就不加括号。include和require后⾯加不加括号对执⾏结果没有区别,但是效率较低。⽽return 在返回引⽤的时候加上括号不但效率低⽽且会造成逻辑错误,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。