美文网首页
php引用变量

php引用变量

作者: hitagi_ | 来源:发表于2018-10-03 22:09 被阅读0次

一丶

<?php

$a=range[0,1000];                       //$a在赋值时计算机会开辟一块内存地址

$b=$a;                                          //$b等于$a时,由于php的copy on write机制,这时的$b和$a指向的是同一块内存地址,

xdebug_debug_zval('a')                //要使用此函数需安装xdebug扩展,查看变量的引用情况为false,地址对应的变量数量为2

$a=range[1,1000];                        //重新给$a赋值,即使和之前的值一样,这时php会重新开辟一块内存地址给$a,而$b的内存地址不变,

xdebug_debug_zval('a');               //此时变量的引用为false,地址对应的变量数为1,说明重新开辟了地址

如果将$b=$a改为$b=&$a,$b和$a指向了同一个地址,但是php的cow机制不会触发了,这时即使$a重新赋值,也始终指向原来的地址。

?>

二丶

<?php

    $a = range[0,1000];

    $b = &$a;                            //引用变量不会触发cow机制

    unset($b);                            //此时的unset操作只会取消$b的引用,实际的变量地址此时仅有$a一个变量指向它

    echo $a;

?>

三丶

<?php

    //对象本身就是引用传递

    class Person

    {

        public $name = "zhangsan";

    }

    $p1 = new Person;

    xdebug_debug_zval('p1');        //指向该地址的变量共1个,引用传递为false

    $p2 = $p1;

    xdebug_debug_zval('p1');        //指向该地址的变量共2个,引用传递为false

    $p2->name = "lisi";                    //对p2重新赋值

    xdebug_debug_zval('p1');        //指向该地址的变量共2个,引用传递为false

?>

对象和变量不同,对象没有cow机制,在重新赋值时不会重新开辟内存空间,他们是共用同一内存空间,所以在对p2进行修改时,p1也会被改为lisi,如果想要进行复制,可以使用clone克隆对象。

四丶

$data每一次循环的值是什么?

<?php

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

    foreach($data as $key=>$val)

    {

        $val = &$data[$key];

    }

?>

第一次循环时,$key = 0,$val = a,进入循环体$val重新赋值为$data[0],此时$val和$data[$key]指向同一块地址,$val=a,$data =['a','b','c'] .

第二次循环,$key = 1,$val = b,进入循环体,$val重新赋值为$data[1],此时$val=b,$data[0]=b,$data=['b','b','c'].第三次循环时,$data = ['b','c','c'].

相关文章

  • 2. php基础-引用变量的考点

    引用变量的考点 真题: 什么是引用变量? 在PHP当中,用什么符号定义引用变量? 考点:PHP的引用变量的概念及定...

  • php基础知识面试点

    引用变量考察点 回顾真题什么是引用变量?在php中,用什么符号定义引用变量? 考点分析分析:考官考点PHP引用变量...

  • PHP之-基础知识考查

    引用变量 真题 什么是引用变量 在PHP中用什么符号定义引用变量(概念及定义方式 php引用变量的原理)1 用不同...

  • PHP

    PHP 标签(空格分隔): 面试 PHP的引用变量的概念及定义 延伸: PHP引用变量的原理 概念:在 PHP 中...

  • PHP——2(PHP变量作用域)

    PHP——2(PHP变量作用域)PHP——3(PHP变量分离/引用(Variables Separation))为...

  • PHP——3(PHP变量分离/引用(Variables Sepa

    PHP——2(PHP变量作用域)PHP——3(PHP变量分离/引用(Variables Separation))为...

  • PHP——4(PHP赋值行为)

    PHP——2(PHP变量作用域)PHP——3(PHP变量分离/引用(Variables Separation))为...

  • PHP——1(PHP变量的存储结构)

    PHP——2(PHP变量作用域)PHP——3(PHP变量分离/引用(Variables Separation))为...

  • PHP面试 必背知识点-1

    1.PHP引用 什么是引用变量?在PHP当中,用什么符号定义引用变量? 对象本身就是引用传递,实例化以后的类如 $...

  • 2.php引用变量

    什么是引用变量?php中,用什么符号定义引用变量? 在php中,引用意味着用不同的名字访问同一个变量的内容。 定义...

网友评论

      本文标题:php引用变量

      本文链接:https://www.haomeiwen.com/subject/yqytaftx.html