• PHP引用传值


    首先需要弄清楚几个概念:

    变量名和变量的值是两个概念,
    变量名是指一段内存空间,
    空间里面存放的才是变量的值。

    传值和传引用的区别

    按值传递

    1.在函数范围内对值得任何改变在函数外部都会被忽略

    2.按值传递时,php必须复制值,如果是大型字符串或是对象等,这是一个代价很大的操作,耗内存。

    按引用传递
    1.在函数内对值得任何改变,在函数外部也能反映出来

    2.按引用传递时不需要复制值,对于性能提高有好处

    例一:

    1 <?php
    2 $a= 'hello world';
    3 $b = &$a;   
    4 unset($a);   //只是解除了变量名和值之间的对应关系$a被销毁了,但是$b还存在
    5 echo $b;     // hello world,只有没有任何变量引用改地址了,内存才会回收。

    如图所示

    unset($a)前

    unset($b)后

    例二:

     1 <?php
     2 
     3     $data=array('a','b','c');
     4     foreach($data as $key=>$value){
     5         $value=&$data[$key];  /**引用赋值,即将$value指向$data[$key]的地址,
     6                               *    下次改变$value的值,也就改变了$data[$key]的
     7                               * 值,这是理解此题的关键.                              
     8                               */    
     9         print_r($data);     //每次循环后将$data打印出来,便于分析结果。
    10         echo '<br/>';
    11     }
    12     
    13     print_r($data);
    14     
    15 Array ( [0] => a [1] => b [2] => c ) //第一次循环,数组没有改变,但是$value指向了$data[1]
    16 Array ( [0] => b [1] => b [2] => c ) //第二次循环,此时将b赋值给了$value,所以$data[1]在第二次循环发生了改变,同时$value指向了$data[2];
    17 Array ( [0] => b [1] => c [2] => c ) //第三次循环,过程同第二次,将$data[2]的值改变了
  • 相关阅读:
    层次遍历二叉树时的一个技巧
    合并两个有序链表
    关于指针的引用和“||”运算符的一些心得
    UE4中显示AI Debug信息
    EQS 自定义Context 如何用Testing Pawn 进行测试?
    4.16中Montage的一些变化
    Move Controller UE4键位
    EQS
    获取文件完整路径快捷方法
    同步引擎版本号的简易方法
  • 原文地址:https://www.cnblogs.com/iaknehc/p/5989980.html
Copyright © 2020-2023  润新知