【问题标题】:Why do strings behave like an array in PHP 5.3?为什么字符串在 PHP 5.3 中表现得像数组?
【发布时间】:2015-12-10 07:33:51
【问题描述】:

我有这个代码:

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

它在 PHP 5.5 中运行良好,但在 PHP 5.3 中,条件返回 true,而 $host 包含类似 pjba01 的字符串。它返回$tierHosts['host']的第一个字母,即p

我的代码有什么问题?

【问题讨论】:

  • 您可以使用(is_array($host) && isset($host["name"])) 绕过此行为。如果不清楚您将收到哪种类型,请务必检查您需要的类型。有关您描述的行为的更多详细信息,请参阅 Rizier123s 的答案。
  • 如果您对 PHP 中可能让您措手不及的其他一些事情感兴趣,请阅读本文。 eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design
  • 为什么字符串表现得像一个数组...?因为它们是一个数组...

标签: php arrays string php-5.3 php-5.4


【解决方案1】:

You can access strings like an array 和之前的 PHP 5.4 偏移量(如您的 name)被默默地强制转换为 0,这意味着您访问了该字符串的第一个字符:

字符 | p | j |乙 |一个 | 0 | 1 |
----------------------------------
索引 | 0 | 1 | 2 | 3 | 4 | 5 |

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    相关资源
    最近更新 更多