php 引用变量知识点

一、什么是引用变量?在php中,用什么符号定义引用变量?
引用变量:用不同的名字访问同一个变量内容

定义方式:使用&符号


二、引用变量衍生知识点

1、写时复制(Copy On Write)


2、针对上面程序改为引用变量后,效果又不一样


3、查看写时复制时php内核zval结构体数据


4、查看写时改变时php内核zval结构体数据


5、unset:只会取消引用,不会销毁空间


6、对象本身就是引用传递

name = "lisi";
xdebug_debug_zval('p1');

var_dump($p1->name);//lisi
var_dump($p2->name);//lisi

三、利用内存变量变动画图解决引用变量题目

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

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

foreach ($data as $key=>$val)
{
    $val = &$data[$key];
}

var_dump($data);//['b','c','c']

/*
 * 最终结果为['b','c','c']
 * 分析
 * 第一次循环:
 * key = 0;
 * val = 'a';//val赋值为'a'
 * val = &$data[0];//val指向data[0]
 *
 * 第二次循环
 * key = 1;
 * val = 'b',//此处由于val引用data[0],那么val='b',也相当于data[0] = 'b'
 * val = &$data[1];////val指向data[1]
 *
 * 第三次循环
 * key = 2;
 * val = 'c',//此处由于val引用data[1],那么val='c',也相当于data[1] = 'c'
 * val = &$data[2];////val指向data[2]
 *
 * 最终数组data的数据为['b','c','c']
 */



你可能感兴趣的:(php)