本文目录导航:
php 什么是可变变量
可变变量有时候使用可变变量名是很方便的。
就是说,一个变量的变量名可以动态的设置和使用。
一个普通的变量通过声明来设置,例如:<?php$a = hello;?>一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。
在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。
例如:<?php$$a = world;?>这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。
因此,以下语句:<?phpecho $a ${$a};?>与以下语句输出完全相同的结果:<?phpecho $a $hello;?>它们都会输出:hello world。
要将可变变量用于数组,必须解决一个模棱两可的问题。
这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1]作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。
解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。
类的属性也可以通过可变属性名来访问。
可变属性名将在该调用所处的范围内被解析。
例如,对于 $foo->$bar 表达式,则会在本地范围来解析 $bar 并且其值将被用于 $foo 的属性名。
对于 $bar 是数组单元时也是一样。
也可使用花括号来给属性名清晰定界。
最有用是在属性位于数组中,或者属性名包含有多个部分或者属性名包含有非法字符时(例如来自 json_decode() 或 SimpleXML)。
Example #1 可变属性示例<?phpclass foo {var $bar = I am bar.;var $arr = array(I am A., I am B., I am C.);var $r = I am r.;}$foo = new foo();$bar = bar;$baz = array(foo, bar, baz, quux);echo $foo->$bar . \n;echo $foo->$baz[1] . \n;$start = b;$end = ar;echo $foo->{$start . $end} . \n;$arr = arr;echo $foo->$arr[1] . \n;echo $foo->{$arr}[1] . \n;?>以上例程会输出:I am bar.I am bar.I am bar.I am r.I am 注意,在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。
$this 变量也是一个特殊变量,不能被动态引用。
php $变量 不能完整输出
你用的if,elseif 判断语句。
当不符合第一个条件的时候才会往下判断,而不是全部都输出。
因为,是你的判断语句问题。
至于变量问题,你可以将相关变量做成一个动态的变量来调用,不要使用静态变量就没事了。
PHP里 switch case条件语句的问题
佩服楼主 很细心哪!这个问题应该从PHP作为动态脚本语言说起:动态语言的变量类型是随存储的变量而变化的,即变量类型是根据具体环境而进行变化的。
字符串abc,从楼主的意思来看可能指确切字符串,但是对于PHP存储的时候它是不能确定的,因为随着语义的变化,其所起的作用也会变化第一个case 0:,PHP脚本将常量0翻译为确切的整数,与字符串比较大小时,需要将字符串转换为整数。
PHP脚本会将字符串abc,从十进制(默认)转换为数字,但是abc很明显不能代表十进制数,即转换失败,则PHP将结果置为0,如果将字符串表示为0xabc,那么PHP脚本能够发现0x标识,将abc作为十六进制转换,所以能够得到abc标识的十六进制整数。
如果楼主学过C,可以做一个简单比较:C中的case必须是数字常量,而不能是字符串,就因为C是变量类型确定的,运行时不能将确定的变量按语义随意转换。
而PHP可以,因为PHP语言是动态的,变量类型是动态的。
或者从PHP的例子中学习:如果一个文件将字符串(不是数字)存储到文件,然后从文件直接读取到变量$a,如下语法就可以将$a作为整数计算:0+$a上述表达式得到的结果也可以作为动态语言的一个变现来看
评论(0)