2012-01-06 109 views
3
$a = '86'; 
var_dump($a); //ouput string(2) "86" 
var_dump($a['wtf']); //output string(1) "8" 

第二oputput奇怪尽管这是相当于在PHP奇怪的输出

var_dump($a[0]); ////output string(1) "8" 

有人可以解释我为什么的var_dump($ A [ 'WTF']);输出字符串(1)“8”?

回答

7

$ a是一个字符串。
在php中的字符串可以看作是一个字符数组(如此$ a [0] =='8'和$ a [1] =='6')
现在,您试图访问字符串的地方['wtf'],因为PHP期望有一个数字,它会尝试将'wtf'转换为数字。由于在此字符串没有数字,它被视为0。

“wtf1”被转换为0,因为它检查第一字符(感谢悲伤BUBE)
“1wtf”转换为1
' 100' 转换为100
‘dfsdgrgergregr’转换为0

+0

当我看到它时,我以为它将'wtf'计数为3(3个字节的数据),并且由于$ a中没有第3个字节,它会开始并输出8 – 2012-01-06 07:29:37

+4

yes,php就像圣经一样,你可以用很多方式解释结果:-D – 2012-01-06 07:31:44

+1

'wtf1'== 0,而不是1,不像'1wtf'。转换停在第一个非数字字符处。 – 2012-01-06 07:32:54

0

可能它会将'wtf'字符串转换为整数0 ...或其他相关内容。但为什么你必须使用$ a ['wtf']?

+1

只是尝试......它不需要任何项目...... – roshanbh 2012-01-06 07:42:32

+0

好的我的回答是正确的。 PHP隐式地将字符串转换为整数值 – robob 2012-01-06 08:24:27

1

PHP有弱类型,也就是说,如果你通过它期待一个整数的字符串,它会透明地将其转换为整数,它在大多数情况下,是好的,因为它允许更简洁的代码。但是,当然,它也允许有更多的错误。

这可能是(可能)原因,为什么添加和连接是由不同的操作符完成的(+会将两个操作数转换为数字,.会将两者都转换为字符串)。

正如之前指出的那样,您试图访问字符串索引,该索引只能是整数,因此'wtf'已正确转换为0并返回第一个字母。如果你通过了,比如'1o1wut',它将被转换为1

+0

小心o,在某些组合中它将被视为Octate/base 8数字 – 2012-01-06 07:46:53