在PHP中&符号即传的是变量的引用而不是拷贝,引用意味着用不同的名字访问同一个变量内容.这并不像C的指针,它们是符号表别名.注意在PHP中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。下面学步园小编来讲解下php的变量和函数前加&有什么用?
php的变量和函数前加&有什么用
PHP的引用允许你用两个变量来指向同一个内容.意思是,当你这样做时:
$a=&$b
?>
这意味着$a和$b指向了同一个变量.
注:$a和$b在这里是完全相同的,这并不是$a指向了$b或者相反,而是$a和$b指向了同一个地方.
同样的语法可以用在函数中,它返回引用,以及用在new运算符中(PHP4.0.4以及以后版本):
$bar=&newfooclass();
$foo=&find_var($bar);
?>
注:不用&运算符导致对象生成了一个拷贝.如果你在类中用$this,它将作用于该类当前的实例.没有用&的赋值将拷贝这个实例(例如对象)并且$this将作用于这个拷贝上,这并不总是想要的结果.由于性能和内存消耗的问题,通常你只想工作在一个实例上面.
尽管你可以用@运算符来关闭构造函数中的任何错误信息,例如用@new,但用&new语句时这不起效果.这是Zend引擎的一个限制并且会导致一个解析错误.
引用做的第二件事是用引用传递变量.这是通过在函数内建立一个本地变量并且该变量在呼叫范围内引用了同一个内容来实现的.例如:
functionfoo(&$var){
$var++;
}
$a=5;
foo($a);
?>
php的变量和函数前加&有什么用
将使$a变成6.这是因为在foo函数中变量$var指向了和$a指向的同一个内容.更多详细解释见引用传递.
引用做的第三件事是引用返回.
引用不是什么
如前所述,引用不是指针.这意味着下面的结构不会产生你预期的效果:
functionfoo(&$var){
$var=&$GLOBALS[“baz”];
}
foo($bar);
?>
这将使foo函数中的$var变量在函数调用时和$bar绑定在一起,但接着又被重新绑定到了$GLOBALS[“baz”]上面.不可能通过引用机制将$bar在函数调用范围内绑定到别的变量上面,因为在函数foo中并没有变量$bar(它被表示为$var,但是$var只有变量内容而没有调用符号表中的名字到值的绑定).
引用传递
你可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值.语法如下:
functionfoo(&$var){
$var++;
}
$a=5;
foo($a);
//$ais6here
?>
注意在函数调用时没有引用符号-只有函数定义中有.光是函数定义就足够使参数通过引用来正确传递了.
以下内容可以通过引用传递:
变量,例如foo($a)
New语句,例如foo(newfoobar())
从函数中返回的引用,例如:
function&bar(){
$a=5;
return$a;
}
foo(bar());
?>
详细解释见引用返回.
以上就是关于“php的变量和函数前加&有什么用”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!