资讯专栏INFORMATION COLUMN

[基础篇]PHP引用变量

SunZhaopeng / 840人阅读

摘要:概述该文章主要从内存空间上简述中引用变量的基本概念工作方式,以及一个常见的实例。概念什么是引用变量,在当中,用什么符号定义引用变量不同的名字访问同一个变量内容,使用表示。

概述

该文章主要从内存空间上简述PHP中引用变量的基本概念、工作方式,以及一个常见的demo实例。

概念

什么是引用变量,在PHP当中,用什么符号定义引用变量?

不同的名字访问同一个变量内容,使用&表示。

COW(copy on write)

内存优化的常见手段,在php中也采用了这种方式来优化内存。

写时复制,即只有当对其中一个或多个变量进行写操作的时候,才会复制一份内存,对其内容进行修改。

在PHP中使用memory_get_usage()观察内存变化

演示

未使用&(引用变量)

        $a = range(0,1000);
        var_dump(memory_get_usage());
        $b = $a;`
        var_dump(memory_get_usage());
        $a = range(0,1000);
        var_dump(memory_get_usage());

运行结果:

内存在第一次和第二次并没有太大的差异,第三次产生较大差异

使用 &

        $a = range(0,1000);
        var_dump(memory_get_usage());
        $b = &$a;
        var_dump(memory_get_usage());
        $a = range(0,1000);
        var_dump(memory_get_usage());

运行结果:

在使用引用传值内存解析分析:

$a被赋值时在内存中占据A内存空间,$b=&$a$b指向同一内存空间,当$a发生改变时$b所占据的内存空间会跟随$a变化
unset
unset() 只会取消引用不会销毁空间
$a=1;
$b=&$a;
unset($b);
echo $a;

输出结果:1

内存空间分析:

$a被赋值 $b=&$a之后$a与$b直行同一内存空间,当unset($b)时取消了$b$a的引用,使$b不在指向$a的内存空间
题外话
对象本身就是引用传递
class Person
{
    public $name="zhangsan";
}
$p1 =new Person;
xdebug_debug_zval("p1");
$p2 =$p1;
xdebug_debug_zval("p1");
$p2->name="lisi";
xdebug_debug_zval("p1");

运行结果:

结果分析:

对象被实例后经引用传递之后$p1 $p2指向的始终是同一内存空间
案例
      $val)
     {
          $val = &$data[$key];
     }
    var_dump($data);
    

写出如上程序的输出结果?
程序运行时,每一次循环结束后变量$data的值是什么?
程序执行完成后,变量$data的值是什么?

内存变化及解析:

感谢

感谢你看到这里,希望本篇可以帮到你。有问题可在评论区留言,谢谢

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29405.html

相关文章

  • PHPer面试指南-PHP

    摘要:本书的地址篇收集了一些常见的基础进阶面试题,基础的面试题不再作答。如何实现持久化持久化,将在内存中的的状态保存到硬盘中,相当于备份数据库状态。相当于备份数据库接收到的命令,所有被写入的命令都是以的协议格式来保存的。 本书的 GitHub 地址:https://github.com/todayqq/PH... PHP 篇收集了一些常见的基础、进阶面试题,基础的面试题不再作答。 基础篇 ...

    stackvoid 评论0 收藏0
  • Nginx基础(2)- Nginx基本配置文件和变量详解

    摘要:基本配置文件和变量详解基本配置文件运行的用户进程数,建议设置为等于总核心数。允许客户端请求的最大单文件字节数。如果主体超过缓冲区大小,则完整主体或其一部分将写入临时文件。该指令在配置的,和区块使用。 Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于C...

    TZLLOG 评论0 收藏0
  • Nginx基础(2)- Nginx基本配置文件和变量详解

    摘要:基本配置文件和变量详解基本配置文件运行的用户进程数,建议设置为等于总核心数。允许客户端请求的最大单文件字节数。如果主体超过缓冲区大小,则完整主体或其一部分将写入临时文件。该指令在配置的,和区块使用。 Nginx基本配置文件和变量详解 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于C...

    hss01248 评论0 收藏0
  • PHP回收周期

    摘要:原文回收周期,增加一篇论文在底部。就是说,仅仅在引用计数减少到非零值时,才会产生垃圾周期。如果他们是循环引用周期的一部分,将永不能被清除进而导致内存泄漏。这个函数将返回使用这个算法回收的周期数。引用计数系统中的同步周期回收 原文:回收周期(Collecting Cycles) ,增加一篇论文在底部。 以下过程仅对数组和对象类型起作用。 传统上,像以前的 php 用到的引用计数内存机制,...

    Astrian 评论0 收藏0

发表评论

0条评论

SunZhaopeng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<