Rumah > pembangunan bahagian belakang > tutorial php > PHP引用变量知识详解

PHP引用变量知识详解

不言
Lepaskan: 2023-03-25 06:42:01
asal
2598 orang telah melayarinya


这篇文章主要介绍了关于PHP引用变量知识详解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

  • 概念:在PHP中引用意味着用不同的名字访问同一个变量内容;

  • 定义方式:PHP使用 ‘&’定义引用变量;

  • 当不使用引用时,变量采取写时复制机制机制(COW):在写入时会复制一份内存进行修改,例如       

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = $a; //此时$b和$a 指向同一个内存空间
var_dump(memory_get_usage());
//当a或b发生写入时,才会复制一块内存进行修改
$a = range(0,1000);
var_dump(memory_get_usage());
Salin selepas log masuk

运行结果:第一次和第二次打印时内存使用量相差不多,第三次发生明显变化,说明当a进行写入操作时,内存发生了复制。


  • 而当时用引用时变量将指向同一内存空间,写入操作时不会发生改变

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = &$a; //将a的空间赋值给b,a与b指向同一空间
var_dump(memory_get_usage());
//当a或b发生写入时,内存不会发生复制
$a = range(0,1000);
var_dump(memory_get_usage());
Salin selepas log masuk

运行结果:内存始终未发生明显变化

通过zval变量容器进行验证

//通过zval变量容器打印
$a = range(0,3);
xdebug_debug_zval('a');//打印 指向内存空间的变量数,和是否被引用
$c =&$a;
xdebug_debug_zval('a');
$c = range(0,3);
xdebug_debug_zval('a');
Salin selepas log masuk

运行结果:

当对c进行写入操作时仍有2个变量指向内存,未发生写时复制



  • unset只会取消引用,不会销毁空间

  • 在php中对象本身就是引用传值,不需使用引用符号

class Person{
    public $name  = "zhangsan";
}
$p1 = new Person();
xdebug_debug_zval('p1');

$p2 = $p1;
xdebug_debug_zval('p1');

$p2->name = "lesi";
xdebug_debug_zval('p1');
Salin selepas log masuk


相关推荐:

php引用定义和引用传递参数实例用法详解


Atas ialah kandungan terperinci PHP引用变量知识详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan