为什么字符串在PHP5.3中的行为类似于数组?
我有以下代码:为什么字符串在PHP5.3中的行为类似于数组?,php,arrays,string,php-5.3,php-5.4,Php,Arrays,String,Php 5.3,Php 5.4,我有以下代码: $tierHosts['host'] = isset($host['name']) ? $host['name'] : $host; 它在PHP5.5中运行良好,但在PHP5.3中,当$host包含类似pjba01的字符串时,条件返回true。它返回$tierHosts['host']的第一个字母,即p 我的代码有什么问题吗?和之前的PHP 5.4偏移量(如您的名称等)被自动转换为0,这意味着您访问了该字符串的第一个字符: character | p | j | b | a |
$tierHosts['host'] = isset($host['name']) ? $host['name'] : $host;
它在PHP5.5中运行良好,但在PHP5.3中,当$host
包含类似pjba01
的字符串时,条件返回true。它返回$tierHosts['host']
的第一个字母,即p
我的代码有什么问题吗?和之前的PHP 5.4偏移量(如您的名称
等)被自动转换为0,这意味着您访问了该字符串的第一个字符:
character | p | j | b | a | 0 | 1 |
-----------------------------------
index | 0 | 1 | 2 | 3 | 4 | 5 |
字符| p | j | b | a | 0 | 1|
-----------------------------------
指数| 0 | 1 | 2 | 3 | 4 | 5|
5.3之后,此类偏移将引发一个通知,您也可以在手册中阅读:
从PHP5.4开始,字符串偏移量必须是整数或类似整数的字符串,否则将抛出警告。以前,像“foo”这样的偏移量被无声地转换为0
您可以使用
(is_array($host)和&isset($host[“name”])
绕过此行为。如果不清楚您将收到哪种类型,请始终对照您需要的类型进行检查。有关您描述的行为的更多详细信息,请参阅Rizier123s的答案。如果您对PHP中可能让您措手不及的其他一些事情感兴趣,请阅读本文。为什么字符串的行为像数组。。。?因为它们是一个数组。。。