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的释放而消失。

PHP的变量的更多相关文章

  1. 6 小时 Python 入门

    6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...

  2. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  3. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  4. Shell特殊变量

    $ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...

  5. Java多线程基础——对象及变量并发访问

    在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...

  6. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  7. PHP源码分析-变量

    1. 变量的三要素变量名称,变量类型,变量值 那么在PHP用户态下变量类型都有哪些,如下: // Zend/zend.h #define IS_NULL 0 #define IS_LONG 1 #de ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. shell变量

    定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...

  10. 引人瞩目的 CSS 变量(CSS Variable)

    这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变 ...

随机推荐

  1. 01OC概述

    目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言.C++,OC主要负责UI界面,C语言.C++可用于图形处理.特点如下: 一.OC基于C语言 C语言 ...

  2. Uva 2319

    理解:区域覆盖.假设该点在勘测半圆的边缘,求出与该点可在一个半圆的坐标范围l,r,然后,for 一次判断 #include<cstdio> #include<algorithm> ...

  3. php的register_globals配置

    1.需求 看ci文档的时候,看到register_globals,要了解这个配置的使用 2.分析 register_globals是PHP.ini里的一个配置,这个配置影响到php如何接收传递过来的参 ...

  4. Vue in 2016

    原文链接:Vue in 2016 Vue 作者尤雨溪对 Vue 在 2016 年的总结以及未来的展望 现在已经是2016的尾声了!在这过去的12个月里,Vue的持续增长速度已经超过了我的预期--这个项 ...

  5. [BZOJ2761][JLOI2011]不重复数字

    [BZOJ2761][JLOI2011]不重复数字 试题描述 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复 ...

  6. espcms特殊标签

    内页banner图从后台调用分类图片 <div style="background:url({%$rootdir%}{%find:type class=$type.topid out= ...

  7. vim 使用

    vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式:命令行模式下按i进入输入模式.vim编辑文件是将文件内容复制到缓冲区显示在屏幕上. vi ...

  8. 14. Longest Common Prefix

    题目: Write a function to find the longest common prefix string amongst an array of strings. Subscribe ...

  9. winfrom获取用户控件里的控件对象

    如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环 ...

  10. 关于Ajax工作原理

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...