1.可变变量

  一个变量的变量名可以动态地设置和使用。一个普通的变量通过声明来设置,而一个可变变量获取了一个普通变量的值作为这个可变变量的变量名,如下所示:

  <?php

    $hi = "hello";
         $$hi = "word";
         echo "$hi $hello<br>";        //输出"hello world"
         echo "$hi ${$hi}";          //输出"hello world"

  在上面的例子中“hi”使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。这时两个变量都被定义了,$hi的内容是"hello",并且$hello的内容是"world"。上面的两条输出指定都会输出"hello world".也就是说,$$hi和$hello是等价的。

2.变量的引用赋值

  变量总是传值赋值。也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。

  PHP中提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单地引用(换言之,“成为其别名”或者“指向”)了原始变量。改动新的变量将影响原始变量,反之亦然。这同样意味着其中没有执行复制操作,因而,这种复制操作更加快速。不过只有在密集的循环中或者很大的数组或对象赋值时才有可能注意到速度的提升。使用引用赋值,简单地将一个“&”复活加到将要赋值的变量前(源变量)。例如下列代码片段所示:

  <?php

    $foo = "Bob";
         $bar = &$foo;

 $bar = "My name is Tom"; //改变变量$bar的值
         echo $bar."<br>";    //变量$bar的值被改变,输出"My name is Tom"
         echo $foo."<br>";    //变量$foo的值也被改变,输出"My name is Tom"

 $foo = "Your name is Bob";   //改变变量$foo的值
         echo $bar."<br>";       //变量$bar的值也被改变,输出"Your name is Bob"
         echo $foo."<br>";       //变量$foo的值被改变,输出"Your name is Bob"

  在上面的代码中,我们并不是将变量$foo的值赋值给变量$bar,而是将$foo的引用赋值给了$bar,这时,$bar相当于是$foo的别名。只要其中的任何一个有所改变,都会影响到另一个变量。有一个重要事项必须指出,那就是只有有名字的变量才可以引用赋值。如下所示:

  <?php

    $foo = 25;

    $bar = &$foo;      //这是一个有效的引用赋值

    $bar = &(24 *47);  //此引用赋值无效,不能将表达式作为引用赋值

    function test(){

      return 25;

    }   

    $bar = &test();      //此引用赋值无效,也是没有名字的变量

     另外,php的引用并不像C语言中的地址指针。例如,在表达式$bar = &$foo中,不会导致$bar和$foo在内存上同体,只是把各自的值相关联起来。基于这一点,使用unset()则不会导致所有引用变量消失。

    <?php

      $foo = 25;

      $bar = &$foo;

      unset($bar);

      echo $foo;      //值为25

  在执行unset()后,变量$bar和$foo仅仅是互相取消值值关联,$foo并没有因为$bar的释放而消失。

最新文章

  1. iOS开源项目周报1215
  2. 数据结构:队列 链表,顺序表和循环顺序表实现(python版)
  3. 【Alpha版本】冲刺阶段——Day 7
  4. JNI_Android项目中调用.so动态库实现详解
  5. entity refenrece 在views中的运用
  6. (转)微软开放了.NET 4.5.1的源代码
  7. Java实战之03Spring-02Spring的核心之IoC
  8. Ubuntu 麒麟版下安装:Apache+php5+mysql+phpmyadmin.
  9. SharePoint 2013的100个新功能之搜索(二)
  10. Ajaxterm-0.10-8.el5.noarch.rpm CentOS 5 (RHEL 5) Download
  11. 一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小
  12. winserver2008r2 + iis7安装django
  13. AtCoder Grand Contest 017
  14. 简述MyBatis的体系结构
  15. 安装vmware tool时出错
  16. String StringBuffer StringBulider 详细看https://www.cnblogs.com/su-feng
  17. 牛客网 223C 区区区间间间(单调栈)
  18. CSS(3)多种方法实现水平垂直居中效果
  19. (网页)HTML中INPUT type=&quot;date&quot;标签如何赋值注意问题(转)
  20. 【学习总结】Git学习-参考廖雪峰老师教程十-自定义Git

热门文章

  1. 利用 autoconf 和 automake 生成 Makefile 文件
  2. 内网安全工具之cain劫持工具
  3. Wireshark抓包工具
  4. 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇
  5. AngularJS 初用总结
  6. SQL表新增触发(触发器)
  7. MapKit/CoreLocation框架 总结
  8. Android 某些配置记录
  9. 一则奇怪的案例处理:ORA-00257: archiver error. Connect internal only, until freed
  10. php多文件上传