技术 · 2014 年 7 月 16 日

Illegal string offset警告信息

某天,某新服务器,某开发的新站,在某些情况下出现了
Warning(E_WARNING): Illegal string offset
警告信息,程序运行正常。

经过排查,原来是php版本变化引起的:

自 PHP 5.4 起字符串下标必须为整数或可转换为整数的字符串,否则会发出警告。

<?php
$str = 'abc';

var_dump($str['1']);
var_dump(isset($str['1']));

var_dump($str['1.0']);
var_dump(isset($str['1.0']));

var_dump($str['x']);
var_dump(isset($str['x']));

var_dump($str['1x']);
var_dump(isset($str['1x']));
?>

以上代码在PHP 5.3中的输出:

string(1) "b"
bool(true)
string(1) "b"
bool(true)
string(1) "a"
bool(true)
string(1) "b"
bool(true)

以上代码在PHP 5.4中的输出:

string(1) "b"
bool(true)

Warning: Illegal string offset '1.0' in /tmp/t.php on line 7
string(1) "b"
bool(false)

Warning: Illegal string offset 'x' in /tmp/t.php on line 9
string(1) "a"
bool(false)
string(1) "b"
bool(false)

原文章在这里:http://cn2.php.net/manual/zh/language.types.string.php
请使用Ctrl+F查询