时间:2021-07-01 10:21:17 帮助过:20人阅读
对于$ 则是我们的重点问题
基本形式:
function &find_var($param) //这里用&在对象前面,作用为声明 { /* ...code... */ return $found_var; } $foo =& find_var($bar); //这里用&,作用为联系变量 $foo->x = 2; //赋值给函数
例子:
function &test() { static $b=0;//申明一个静态变量 $b=$b+1; echo $b; return $b; } $a=test();//这条语句会输出$b的值为1, $a=5; $a=test();//这条语句会输出$b的值为2 ,因为没有引用返回,$a=5,不对对象起赋值作用 $a=&test();//这条语句会输出$b的值为3 ,成功引用返回,下面的代码起作用 $a=5; $a=test();//这条语句会输出$b的值为6
下面解释下:
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别。至于原因:这是PHP的规定,
php规定通过$a=&test(); 方式得到的才是函数的引用返回。
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。)
用上面的例子来解释就是:
$a=test()方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变都不会影响到函数中的$b,通过$a=&test()方式调用函数呢, 他的作用是将return $b中的$b变量的内存地址与$a变量的内存地址,向了同一个地方,产生了相当于这样的效果($a=&b;) 所以改变$a的值,也同时改变了$b的值,所以在执行了:$a=&test();
$a=5;
以后,$b的值变为了5 ......
那么,php函数前面加&符号有什么作用呢?
php变量前面加&符号是什么意思
先看一个示例:
$foo = 321; $bar = &$foo; $bar = 123; print $foo; //那么输出的结果将会是什么呢
改动新的变量将影响到原始变量,这种赋值操作更加快速。
注意:只有命名变量才可以传地址赋值,就是说,改变了$bar的值,也就改变了$foo的值了。
另一个例子:
$_GET[1] = 1; function &a() { $a = $_GET[1]; return $a; } $x =& a(); $x = 'MoontoC'; echo $_GET[1]; // 此时这里会显示 MoontoC, 而不是最初赋值的1
你明白其中的意义了吗, 使用函数传值时必须双方都使用引用符号才有意义,才能真正引用, 而任何一边少了引用符号, 都不会得到错误的内容, 但内容是传值, 而不是传引用了。没有程序基础的人最初学php的确很难理解传值和传引用的重要性, 觉得反正都能得到自己要的东西, 其实不是的, 很多时候虽然得到的东西一样, 但是代价却完全不一样, 一个长达200万字的值, 被当作值传送就是400万字同时放在内存中待用, 多耗费一倍内存的意思,而传引用就只是一个快捷方式传送过去而已。
以上就是php在函数和变量前面加上 @和$符号的区别详解的详细内容,更多请关注Gxl网其它相关文章!