我有这样的代码:
$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。