PHP基础复习(一)——引用变量

前言

本系列文章主要是根据实战视频《360大牛:全面解读PHP面试》学习过程中记录的学习笔记,期间也会加入查找资料和平时学习中学习到的知识。希望可以鞭策自己不断夯实基础,平时也要查漏补缺。

引用变量概念

在PHP中引用意味着用不同的名字访问同一个变量内容。

定义方式

使用&符号,也就是在变量或者函数、对象等前面加上&符号。

 

工作原理

<?php
  
  $a = range(0, 1000);

/*
   此时,不会为$b额外生成一份内存空间,因为php的COW机制(Copy On Write)。
   当$a或$b其中一个变量发生改变时,才会再开辟一份新的内存空间。
   COW(copy on write)是内存优化的常见手段,在php中也采用了这种方式来优化内存。
   写时复制,即只有当对其中一个或多个变量进行写操作的时候,才会复制一份内存,对其内容进行修改。
*/
  $b = $a;      //此时均指向同一内存空间


  $a = range(0, 1000);  //此时$a发生了写操作,会为$a复制一份内存空间,并且对值进行修改


//===============================================================

    $a = range(0, 1000);

    $b = &$a;      //无论何时均指向同一内存空间

    $a  = range(0, 1000);

面试引申考点

unset

unset()只会取消引用,不会销毁内存空间

<?php
   
    $a = 1;

    $b = &$a;

    unset($b);    //只是把$b对$a的引用取消   http://www.php.net/manual/zh/function.unset.php

    echo $a . "\n";      //输出结果   1

 

对象的复制

在PHP中,对象本身就是引用传递。

<?php

class Person{

    public $name = "zs";

}


$p1 = new Person();

$p2 = $p1;

$p2->name = 'ls';       //此时$p1和$p2的$name的值均为 ls 。此为对象的浅复制;若想实现深复制,需要重写__clone()方法

    

解题方法

       针对引用变量的相关考察点,一般使用画图分析法,使用一个小长方形代表一个变量指向的内存,然后分析程序每一步中,变量指向的内存是否发生改变,一边对图修改一边分析。

 

 

参考链接:

       https://blog.csdn.net/qq_38253837/article/details/80340505

       https://www.cnblogs.com/gengyi/p/6399752.html        PHP引用(&)使用详解

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章