您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP变量标识符的一些守则

2024/2/25 13:23:37发布16次查看
php变量标识符的一些规则
php变量标识符提供了非常特别的方便。但是,相当多的从事多年的php程序员却无法清楚它的具体用法,从而出错时,不知哪里错了。所以,现在总结一下。便于大家快速掌握。
php变量的运行机制是,将变量标识符$后的字符串,或表达式运算结果的字符串作为变量名,去变量池获取变量值。
可见,php相当于提供了一个变量的“名称指针”。它不同于c++的地址指针,因为,不会有空地址的不安全性。也不会有变量内存溢出的问题。所有这些php都给我们完成了。
变量标识符:
$:以后面的字符串为变量名,取同名变量。
$a='hello';
$$a = 'world';
{}将其中的表达式解析成字串,并取此字串的变量,{}不能单独在表达式外部存在,否则就会当成流程控制而报错。这就是说, {}前必有$,或者外面必有引号。
echo $a, ${$a}; echo $a, $$a;
二者的区别: $总是寻找后面的第一个字串, {}是将内部的表达式解析为字串。php正是用这一方式实现了变量的“名称指针”。
${}:由{}返回字串交给$再处理。用途:对于表达式结果取变量。
?如:${$array[$i][$j]} , 如果使用 $$array[$i][$j]} 则php会找 $$array这个变量。而不是找$array[$i][$j]为结果的变量名的变量。
{}在函数中与表达式中
猜猜看:下面程序返回什么:
$a='hello'; $$a = 'world'; echo '1 ', $a, '{$a}', ''; echo '2 ', $a, {$a}, ''; echo '3 ', $a, {{$a}}, ''; echo '4 ', $a, ${$a}, ''; echo '5 ', $a, ${$a}, ''; echo '6 ', $a, {${$a}}, ''; echo '7 ', $a, {{${$a}}}, ''; echo '8 ', $a, $$a, ''; echo '9 ', $a, {a}, ''; echo '10 ', $a, ${a}, '';
?
结果:
echo '1 ', $a, '{$a}', '';
输出是:1 hello{$a}?
//正常情况下,单引号是非执行字串,按原结果返回。但是:smarty同样会将其进行解析!!所以, smarty模板中, ‘{$a}’这样的表达式,仍可能出现的是你不想要的结果!!
假如:str_replace('{$foo} ',$foo, '{$foo}.some');
因为上面的原因:需要改为:
? str_replace(array('{', '$foo',} '),array('',$foo, ''), '{$foo}.some');
echo '2 ', $a, {$a}, '';
输出是: 2 hellohello
双引号中,无论是否有{},变量总会被解析。
echo '3 ', $a, {{$a}}, '';
输出是: 3 hello{hello}?
//所以,如果要输出带{}的结果,则需要加两层。
echo '4 ', $a, ${$a}, '';?
输出是: 4 helloworld
echo '5 ', $a, ${$a}, '';
输出是: 4 helloworld
// ${$表达式},无论外面是否带双引号,结果都是一样的?
echo '6 ', $a, {${$a}}, '';?
输出是: 6 helloworld
echo '7 ', $a, {{${$a}}}, '';
输出是: 7 hello{world}
//要输出带{}的结果,必须多加一层。
echo '8 ', $a, $$a, '';
输出是: 8 hello$hello
//双引号中的$只执行一次。所以,结果就不是你所要的。
附注:{}还可用于数组,即对数组下标访问。即
$array[$i][$j] 与 $array{$i}{$j}是等价的。但正常,由于php文档中给出是的[]。而字符串是字节数组,所以,我们只有在用字节数组模式访问字符串时,才使用{}
$a='ux:cache'; $a{2}=''; echo $a; 这个结果是什么,你知道吗?
echo '9 ', $a, {a}, '';
输出是:9 hello{a}
echo '10 ', $a, ${a}, '';
输出是:10 hellohello可以见到, {}外有$, {}也会将结果送给$解析。
总结:
双引号中的$只会解析一次。不会进行多重解析。echo “$$a”,则要改为 echo “${$a}”;
{}遇$成为{$foo}就会被解析。要输出带{}的结果,则要{{$foo}}
$是向后寻找字符串,所以,数组或表达式的结果: 不能
$$array[$i][$j] 而是要 ${$array[$i][$j]}
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product