zoukankan      html  css  js  c++  java
  • php的引用

    引用是什么?

    在 PHP 中引用意味着用不同的名字访问同一个变量内容。和C的指针相比,php的引用更像是 Unix 文件系统中的硬链接。

    php官网中的例子:

    来源:http://php.net/manual/zh/language.references.return.php

    <?php
    /* Imagine this is memory map
    ______________________________
    |pointer | value | variable              |
    -----------------------------------
    |   1     |  NULL  |         ---           |
    |   2     |  NULL  |         ---           |
    |   3     |  NULL  |         ---           |
    |   4     |  NULL  |         ---           |
    |   5     |  NULL  |         ---           |
    ------------------------------------
    Create some variables   */
    $a=10;
    $b=20;
    $c=array ('one'=>array (123));
    /* Look at memory
    _______________________________
    |pointer | value |       variable's       |
    -----------------------------------
    |   1     |  10     |       $a               |
    |   2     |  20     |       $b               |
    |   3     |  1       |      $c['one'][0]   |
    |   4     |  2       |      $c['one'][1]   |
    |   5     |  3       |      $c['one'][2]   |
    ------------------------------------
    do  */
    $a=&$c['one'][2];
    /* Look at memory
    _______________________________
    |pointer | value |       variable's       |
    -----------------------------------
    |   1     |  NULL  |       ---              |  //value of  $a is destroyed and pointer is free
    |   2     |  20     |       $b               |
    |   3     |  1       |      $c['one'][0]   |
    |   4     |  2       |      $c['one'][1]   |
    |   5     |  3       |  $c['one'][2]  ,$a | // $a is now here
    ------------------------------------
    do  */
    $b=&$a;  // or  $b=&$c['one'][2]; result is same as both "$c['one'][2]" and "$a" is at same pointer.
    /* Look at memory
    _________________________________
    |pointer | value |       variable's           |
    --------------------------------------
    |   1     |  NULL  |       ---                  |  
    |   2     |  NULL  |       ---                  |  //value of  $b is destroyed and pointer is free
    |   3     |  1       |      $c['one'][0]       |
    |   4     |  2       |      $c['one'][1]       |
    |   5     |  3       |$c['one'][2]  ,$a , $b |  // $b is now here
    ---------------------------------------
    next do */
    unset($c['one'][2]);
    /* Look at memory
    _________________________________
    |pointer | value |       variable's           |
    --------------------------------------
    |   1     |  NULL  |       ---                  |  
    |   2     |  NULL  |       ---                  |  
    |   3     |  1       |      $c['one'][0]       |
    |   4     |  2       |      $c['one'][1]       |
    |   5     |  3       |      $a , $b              | // $c['one'][2]  is  destroyed not in memory, not in array
    ---------------------------------------
    next do   */
    $c['one'][2]=500;    //now it is in array
    /* Look at memory
    _________________________________
    |pointer | value |       variable's           |
    --------------------------------------
    |   1     |  500    |      $c['one'][2]       |  //created it lands on any(next) free pointer in memory
    |   2     |  NULL  |       ---                  |  
    |   3     |  1       |      $c['one'][0]       |
    |   4     |  2       |      $c['one'][1]       |
    |   5     |  3       |      $a , $b              | //this pointer is in use
    ---------------------------------------
    lets tray to return $c['one'][2] at old pointer an remove reference $a,$b.  */
    $c['one'][2]=&$a;
    unset($a);
    unset($b);   
    /* look at memory
    _________________________________
    |pointer | value |       variable's           |
    --------------------------------------
    |   1     |  NULL  |       ---                  |  
    |   2     |  NULL  |       ---                  |  
    |   3     |  1       |      $c['one'][0]       |
    |   4     |  2       |      $c['one'][1]       |
    |   5     |  3       |      $c['one'][2]       | //$c['one'][2] is returned, $a,$b is destroyed
    --------------------------------------- ?>
    I hope this helps.

  • 相关阅读:
    CMDB服务器管理系统【s5day92】:服务器管理回顾
    主机管理+堡垒机系统开发:需求讨论(一)
    saltstack主机管理项目:今日总结(六)
    saltstack主机管理项目:动态调用插件解析-模块解析(五)
    saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)
    saltstack主机管理项目:计主机管理项目命令分发器(三)
    saltstack主机管理项目:主机管理项目需求分析(一)
    saltstack主机管理项目:主机管理项目架构设计(二)
    CMDB服务器管理系统【s5day89】:采集资产之整合资产
    CMDB服务器管理系统【s5day89】:采集资产之汇报信息
  • 原文地址:https://www.cnblogs.com/xiangcaiduoyidian/p/5941404.html
Copyright © 2011-2022 走看看