php的引用(就是在变量或者函数、对象等前面加上&符号)
在PHP 中引用的意思是:不同的名字访问同一个变量内容。 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容,在内存中存放的地址。
1.变量的引用
PHP 的引用允许你用两个变量来指向同一个内容
<?php
$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b="EFG";
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>
2.函数的引用传递(传址调用)
传址调用我就不多说了 下面直接给出代码
<?php
function test(&$a){
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b;//输出101
?>
要注意的是,在这里test(1);的话就会出错,原因自己去想。
<?php
function &test(){
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}
$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2
$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6
?>
下面解释下:
通过这种方式a=test()
;得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因: 这是PHP的规定PHP规定通过a=test()
;得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因:这是PHP的规定PHP规定通过a=&test()
; 方式得到的才是函数的引用返回
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。)
用上面的例子来解释就是
a=test()
方式调用函数,只是将函数的值赋给a=test()
方式调用函数,只是将函数的值赋给a而已, 而a做任何改变 都不会影响到函数中的a做任何改变 都不会影响到函数中的b
而通过a=&test()
方式调用函数呢, 他的作用是 将returna=&test()
方式调用函数呢, 他的作用是 将returnb中的 b变量的内存地址与b变量的内存地址与a变量的内存地址 指向了同一个地方
即产生了相当于这样的效果(a=&a=&b;) 所以改变a的值 也同时改变了a的值 也同时改变了b的值 所以在执行了
a=&test();a=&test();a=5;
以后,$b的值变为了5
这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中
另附一个php官方例子:
This is the way how we use pointer to access variable inside the class.
<?php
class talker{
private $data = 'Hi';
public function & get(){
return $this->data;
}
public function out(){
echo $this->data;
}
}
$aa = new talker();
$d = &$aa->get();
$aa->out();
$d = 'How';
$aa->out();
$d = 'Are';
$aa->out();
$d = 'You';
$aa->out();
?>
the output is "HiHowAreYou"
6.取消引用
当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如:
<?php
$a = 1;
$b =& $a;
unset ($a);
?>
不会 unset b,只是b,只是a。
以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>实战视频、大厂面试文档免费获取
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!