为什么字符串在PHP 5.3中表现得像数组?


Why do strings behave like an array in PHP 5.3?

我有这样的代码:

$tierHosts['host'] = isset($host['name']) ? $host['name'] : $host;

它在PHP 5.5中工作得很好,但在PHP 5.3中,当$host包含pjba01这样的字符串时,条件返回true。返回$tierHosts['host']的首字母,即p

我的代码有什么问题?

你可以访问像数组一样的字符串,之前的PHP 5.4偏移量,比如你的name被静默地强制转换为0,这意味着你访问了字符串的第一个字符:

character | p | j | b | a | 0 | 1 |-----------------------------------索引| 0 | 1 | 2 | 3 | 4 | 5 |之前

在5.3之后,这样的偏移会抛出一个通知,你也可以在手册中读到:

从PHP 5.4开始,字符串偏移量必须是整数或类整数字符串,否则将抛出警告。以前,像"foo"这样的偏移量被静默地强制转换为0。