可变变量

有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如:

  1. <?php
  2. $a = 'hello';
  3. ?>

一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如:

  1. <?php
  2. $$a = 'world';
  3. ?>

这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,以下语句:

  1. <?php
  2. echo "$a ${$a}";
  3. ?>

与以下语句输出完全相同的结果:

  1. <?php
  2. echo "$a $hello";
  3. ?>

它们都会输出:hello world。

要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要$$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]

类的属性也可以通过可变属性名来访问。可变属性名将在该调用所处的范围内被解析。例如,对于 $foo->$bar 表达式,则会在本地范围来解析$bar 并且其值将被用于 $foo 的属性名。对于 $bar 是数组单元时也是一样。

也可使用花括号来给属性名清晰定界。最有用是在属性位于数组中,或者属性名包含有多个部分或者属性名包含有非法字符时(例如来自json_decode() 或 SimpleXML)。

Example #1 可变属性示例

  1. <?php
  2. class foo {
  3. var $bar = 'I am bar.';
  4. var $arr = array('I am A.', 'I am B.', 'I am C.');
  5. var $r = 'I am r.';
  6. }
  7.  
  8. $foo = new foo();
  9. $bar = 'bar';
  10. $baz = array('foo', 'bar', 'baz', 'quux');
  11. echo $foo->$bar . "\n";
  12. echo $foo->$baz[1] . "\n";
  13.  
  14. $start = 'b';
  15. $end = 'ar';
  16. echo $foo->{$start . $end} . "\n";
  17.  
  18. $arr = 'arr';
  19. echo $foo->$arr[1] . "\n";
  20. echo $foo->{$arr}[1] . "\n";
  21.  
  22. ?>

以上例程会输出:

  1. I am bar.
  2. I am bar.
  3. I am bar.
  4. I am r.
  5. I am B.

Example #2 可变属性示例

  1. <?php
  2.  
  3. //You can even add more Dollar Signs
  4.  
  5. $Bar = "a";
  6. $Foo = "Bar";
  7. $World = "Foo";
  8. $Hello = "World";
  9. $a = "Hello";
  10.  
  11. $a; //Returns Hello
  12. $$a; //Returns World
  13. $$$a; //Returns Foo
  14. $$$$a; //Returns Bar
  15. $$$$$a; //Returns a
  16.  
  17. $$$$$$a; //Returns Hello
  18. $$$$$$$a; //Returns World
  19.  
  20. //... and so on ...//
  21.  
  22. ?>

Example #3 可变属性示例

  1. <?php
  2. // Given these variables ...
  3. $nameTypes = array("first", "last", "company");
  4. $name_first = "John";
  5. $name_last = "Doe";
  6. $name_company = "PHP.net";
  7.  
  8. // Then this loop is ...
  9. foreach($nameTypes as $type)
  10. print ${"name_$type"} . "\n";
  11.  
  12. // ... equivalent to this print statement.
  13. print "$name_first\n$name_last\n$name_company\n";
  14. ?>

以上例程会输出:

  1. John
  2. Doe
  3. PHP.net
  4. John
  5. Doe
  6. PHP.net

摘自:http://php.net/manual/zh/language.variables.variable.php

PHP的学习--可变变量的更多相关文章

  1. php学习笔记5--php中的可变变量,可变函数及匿名函数

    可变变量指的是:将一个变量的值再次当做一个变量名从而得到另外一个变量的值.如:$name = 'dqrcsc';$myname = 'name'; //$myname的值碰巧是另一个变量的变量名ech ...

  2. php学习笔记-可变变量

    看一个例子. <?php $a = 'hello'; $hello = 'hi'; echo $$a; ?> 如果一个变量名前面有两个美元符号,那么这个变量就叫做可变变量.就拿上面这个举例 ...

  3. PHP学习 类型 变量 常数 运算符

    PHP支持下列8种类型 标量类型 scalar type整数 integer浮点数 float double布尔 boolean字符串 string 特殊类型 special typeNULL资源 r ...

  4. PHP的可变变量与可变函数

    什么叫可变.在程序世界中,可变的当然是变量.常量在定义之后都是不可变的,在程序执行过程中,这个常量都是不能修改的.但是变量却不同,它们可以修改.那么可变变量和可变函数又是什么意思呢?很明显,就是用另一 ...

  5. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  6. PHP学习(变量)

    PHP学习(变量) 1. PHP属于松散类型,创建变量时不用指定类型. 2.变量命名规范: 1)第一个字符必须是$ 2)$后的第一个字符必须是 字母 或 下划线 3)其他字符可以是 字母, 数字, 下 ...

  7. PHP 注释 数据类型 变量的定义/输出 类型的获取/转换 可变变量

    注释方法: 1,单行注释:     // 2,  多行注释:     /*   */ 二,数据类型 1,integer(整数型):在三十二位操作系统中它的有效范围是:-2147483648~+2147 ...

  8. php $$可变变量理解

    //在变量前面加上两个$$,如$$name,这表示可变变量,可以动态的设置和使用,先设置一个普通变量,一个可变变量会获取了一个普通变量的值作为这个可变变量的变量名 $a = 'b'; $b = 'c' ...

  9. php -- 可变变量

    有时候使用可变变量名是很方便的.就是说,一个变量的变量名可以动态的设置和使用.一个普通的变量通过声明来设置,例如: <?php $a = 'hello'; ?> 一个可变变量获取了一个普通 ...

随机推荐

  1. css+js回到顶部

    .backToTop { display: none; width: 18px; line-height: 1.2; padding: 5px 0; background-color: #000; c ...

  2. 在已有 Xcode 项目中 加入Cordova框架

    转自:http://www.jianshu.com/p/656838ae92bc 我们知道,在UIKit中的UIWebView虽然已经提供了很多功能了,比如JavaScript和Objc之间的通信.但 ...

  3. Linq To Xml基础

    <?xml version="1.0" encoding="utf-8" ?> <Books> <Category Order=& ...

  4. LintCode 111 Climbing Stairs

    这道题参考了这个网址: http://blog.csdn.net/u012490475/article/details/48845683 /* 首先考虑边界情况,当有1层时,有一种方法. 然后再看2层 ...

  5. 自学日记--JavaScript 001

    1.1输出内容: document.write(); 1.2警告语句: alert(); 1.3确认语句: comfirm(str); 返回值:boolean  确认返回true  取消返回false ...

  6. the diff typeof and instanceof

    instanceof和typeof都能用来判断一个变量是否为空或是什么类型的变量. typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string ...

  7. DWZ错误的解决:0x800a13af - Microsoft JScript 运行时错误: 重新声明常量“document”

    在写完Login后,需要跳转到Index中,就是DWZ的主界面,结果出现如下问题: 0x800a13af - Microsoft JScript 运行时错误: 重新声明常量“document” 费了很 ...

  8. ORACLE索引失效原因归纳[转]

    1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.   由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Orac ...

  9. Oracle常用函数笔记

    一.字符函数 1.dual 临时表 oracle中的临时变量表,此表只返回第一行第一列 例如:select sysdate from dual 输出:2014-6-9 11:20:39 2.Initc ...

  10. WebAPI的一种单元测试方案

    大家是如何对webApi写测试的呢? 1.利用Fiddler直接做请求,观察response的内容. 2.利用Httpclient做请求,断言response的内容. 3.直接调用webApi的act ...