zoukankan      html  css  js  c++  java
  • php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符【转】

    php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符
    方式一:使用花括号,前缀部分不需要用单引号

    $nums10 = 100;
    $count = 10;
    print ${'nums'.$count};//结果输出100
    

    方式二:使用两个$符,先给key赋值最终的变量名称,后面才当成真正的变量使用

    $animal = 'turtles';
    $turtles = 103;
    print $$animal;
    

    =================
    PHP可以动态地创建一个变量名。如:使用与数据库查询得到的字段名称一致的变量名。
    使用PHP中“可变变量”的语法:在一个其值为你想作为变量名称的变量前面加一个$:

     
    在PHP中如果在一个变量名称前面放两个美元($)符号,PHP就会废弃右面的变量,而取其值,然后,将该值作为“真正”的变量名称。例如:

    $animal = 'turtles';
    $turtles = 1024;
    print $$animal;
    

    这段代码会输出1024。因为$animal = ’turtles',$$animal 就是$turtles,而$turtles等于1024。

    如果使用大括号,还能够构造出用于表示变量名的更复杂的表达式:

    $stooges = array('Moe','Larry','Curly');
    $stooge_moe = 'Moses Horwitz';
    $stooge_larry = 'Louis Feinberg';
    $stooge_curly = 'Jerome Horwitz';
    foreach ($stooges as $s) {
      print "$s's real name was ${'stooge_'.strtolower($s)}.
    ";
    }
    

    输出

    Moe's real name was Moses Horwitz.
    Larry's real name was Louis Feinberg.
    Curly's real name was Jerome Horwitz.
    

    PHP会求得位于大括号之间的表达式的值,并将这个值作为一个变量名。大括号中的表达式甚至还可以调用函数,比如上面代码中的strtolower()。
    在迭代类似的变量名称时,可变变量也很有用。假如你想要查询一个数据库表,其字段名分别是title_1, title_2等。如果你想要检查一个标题($title)是否与其中一个字段的值匹配,那么最简单的方式就是像下面这样进行循环遍历:

    for ($i = 1; $i <= $n; $i++) {
      $t = "title_$i";
      if ($title == $$t) { /* match */ }
    }
    

    当然,如果把这些值保存到一个数组中可能会更直观,不过,要是你在维护一段使用了这种技术的老代码(即不能修改),可变变量就很有用了。
    大括号语法在理清有关数组元素的歧义时是必要的。可变变量$$donkeys[12]可能有两种含义。第一种含义是“拿$donkeys数组中第12元素的值作为一个变量名”,要想明确表示这种含义,应该写成:${$donkeys[12]}。第二种含义是“用标量$donkeys的值作为一个数组名称,并找到该数组中的第12元素”,若想明确表示这种含义,应该写成:${$donkeys}[12]。

    HP中动态创建变量名语法并不局限于两个美元符号,可以使用三个甚至更多个。然而,在实践中很少出现有必要使用超过两个间隔层次的情况。
     
    来源:https://www.cnblogs.com/zdz8207/p/php-dynamic-variable.html

  • 相关阅读:
    hdu 5115 Dire Wolf 区间DP
    泛型兼容的注意事项
    maven web项目不能创建src/main/java等文件夹的问题
    error the @annotation pointcut expression is only supported at Java 5
    HashSet重复元素判断
    oracle 分库分表(sharding)
    关系型数据库分库分表解决方案
    JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final
    eclipse中更改配置使得switch语句不出错
    java io流中怎么在一个文本中追加字符串
  • 原文地址:https://www.cnblogs.com/KillBugMe/p/13259617.html
Copyright © 2011-2022 走看看