关于php数组

今天来说一下php的数组,如果说php是那个德州电锯杀人狂,我觉得数组就是那个杀人狂的电锯。。。

切回正题,有一个关于php数组的问题在项目里不止遇到一次了,现在来说说这个,先看下面的代码:


$person = array('name'=>'legendjw','age'=>23);

echo "name:$person['name']";

咋一看没有什么问题呀,双引号可以解析变量,然后我放了一个数组变量,然后你一运行就报下面的致命错误:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

然后查阅万能的php手册(手册请务必常看!!),在手册数组那一章中描述了这样写法php解释器解释不了,那么怎么办了,当然你可以这样换:


echo "name:".$person['name'].";age:".$person['age'];

当然你可能嫌烦要写好多连接,那我们就用php变量的复杂语法帮助解析器来明确表明变量:


echo "name:{$person['name']};age:{$person['age']}";

可是如果你是使用类似与thinkphp一样的框架那么{}可能就被作为定界符直接被替换了,那怎么办?那我们还可以这样写


echo "name:$person[name];age:$person[age]";

如果你看过手册你可能想说这不是一个好的写法,首先说为什么呢,当以这种裸字符串(听这个名字感觉好来感有某有…)来写时php是可以运行的,如下面直接输出


echo $person[name];

但是我们要明确了解php是如何处理这种情况的,加上error_reporting(E_ALL);我们再次运行就看到警告信息

Notice: Use of undefined constant name – assumed ‘name’

哦,本来我们以为php解析器是可以直接这样解析数组的,这样看就不是了,原来这里的name是被解析成常量的,但是php容错能力很强,当没有这个常量时就把这个裸字符串(再次来感有木有!!)替换成正常字符串了。所以你直接这样使用是有隐患的,如下面代码\


define('a','b');

$arr=array('a'=>'ada','b'=>'boy');

echo $arr[a];    //输入boy

讲到这,你可能要问了,那你为什么在上面双引号里还要使用裸字符串(高潮了有木有!!!)这种写法呢?为什么呢,因为你想呀,在双引号中可以有大写也可以有小写单词,php解释器是无法解析常量的,换句话说,php解析器是不会在双引号中搜寻常量的。所以当我们加上error_reporting(E_ALL);下面的写法就不再有任何警告信息了


echo "name:$person[name];age:$person[age]";

关于php数组》有2个想法

发表评论

邮箱地址不会被公开。