我得到一个奇怪的PHP错误后更新我的PHP版本到5.4.0-3。
我有这样一个数组:
Array
(
[host] => 127.0.0.1
[port] => 11211
)
当我试图像这样访问它时,我会得到奇怪的警告
print $memcachedConfig['host'];
print $memcachedConfig['port'];
Warning: Illegal string offset 'host' in ....
Warning: Illegal string offset 'port' in ...
我真的不想只是编辑我的php.ini并重新设置错误级别。
错误非法字符串偏移'whatever'在…通常意味着:你试图使用一个字符串作为一个完整的数组。
这实际上是可能的,因为字符串在php中可以被视为单个字符的数组。所以你认为$var是一个带键的数组,但它只是一个带标准数字键的字符串,例如:
$fruit_counts = array('apples'=>2, 'oranges'=>5, 'pears'=>0);
echo $fruit_counts['oranges']; // echoes 5
$fruit_counts = "an unexpected string assignment";
echo $fruit_counts['oranges']; // causes illegal string offset error
你可以在这里看到它的作用:
http://ideone.com/fMhmkR
对于那些遇到这个问题试图将错误的模糊性转化为解决它的方法的人,就像我一样。
从PHP 5.4开始,我们需要传递与函数预期相同的数据类型值。例如:
function testimonial($id); // This function expects $id as an integer
当调用这个函数时,如果一个字符串值是这样提供的:
$id = $array['id']; // $id is of string type
testimonial($id); // illegal offset warning
这将生成一个非法偏移警告,因为数据类型不匹配。为了解决这个问题,你可以使用settype:
$id = settype($array['id'],"integer"); // $id now contains an integer instead of a string
testimonial($id); // now running smoothly