引用变量

引用变量的定义
用不用的名字访问同一个变量内容 &
延伸 :php引用变量的原理
1 变量空间存储方式

$a = range(0,1000);
var_dump(memory_get_usage());
//变量a会开辟one空间,存储a,将a赋值给b之后,b不会占用一个新的空间,会和a共用一块空间,a和b同时指向one空间
$b = $a;
var_dump(memory_get_usage());
//对a进行修改 写操作 此时原来a就不会指向one空间,b指向one空间,a会开辟一块新空间two空间
$a = range(1,1000);
var_dump(memory_get_usage());

2 引用

$a = range(0,1000);
var_dump(memory_get_usage());
//变量a会开辟one空间,使用引用之后,将a的地址给了b,a和永远会指向同一空间
$b = &$a;
var_dump(memory_get_usage());
//对a进行修改,改掉的只是空间值,使用引用之后,永远指向同一个空间,a和b的值是修改之后的值
$a = range(1,1000);
var_dump(memory_get_usage());

zval结构体

$a = range(0,3);
xdebug_debug_zval('a');

打印结果如下
这里写图片描述
1 代表变量空间的变量个数 2 是否有引用

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

    $a = 1;
        $b = &$a;
        unset($b);

        echo $a;die();
$a的引用给去掉,则打印$a1$b就是不存在的变量了

这里写图片描述
对象 本身就是引用,不需要加引用符号

class Person{
    public $name = '张三';
}

$p1 = new Person();
$p2 = $p1;
$p2->name = '王五';

这里写图片描述

真题分析

$data = ['a','b','c'];

foreach($data as $key => $val){
    $val = &$data[$key];
}
//程序运行时,每一次循环结束后变量$data的值是什么,请解释
//程序执行完成后,变量$data的值是什么,请解释

这里写图片描述

猜你喜欢

转载自blog.csdn.net/gengfeicsdn/article/details/78758625
今日推荐