TL; DR
您正在尝试访问a string
就像它是一个数组一样,键是a string
。string
不会明白的。在代码中我们可以看到问题:
"hello"["hello"];
// PHP Warning: Illegal string offset 'hello' in php shell code on line 1
"hello"[0];
// No errors.
array("hello" => "val")["hello"];
// No errors. This is *probably* what you wanted.
深入
让我们看看这个错误:
警告:...中的非法字符串偏移量“端口”
它说什么?它表示我们正在尝试使用字符串'port'
作为字符串的偏移量。像这样:
$a_string = "string";
// This is ok:
echo $a_string[0]; // s
echo $a_string[1]; // t
echo $a_string[2]; // r
// ...
// !! Not good:
echo $a_string['port'];
// !! Warning: Illegal string offset 'port' in ...
是什么原因造成的?
由于某些原因,您期望一个array
,但是您有一个string
。只是一个混乱。也许您的变量已更改,也许从未更改过array
,但这并不重要。
该怎么办?
如果我们知道应该有一个array
,我们应该做一些基本的调试来确定为什么没有一个array
。如果我们不知道是否会有array
or或string
,则事情会变得有些棘手。
我们可以做的是各种检查,以确保我们不会在诸如is_array
and isset
或诸如此类的情况下收到通知,警告或错误array_key_exists
:
$a_string = "string";
$an_array = array('port' => 'the_port');
if (is_array($a_string) && isset($a_string['port'])) {
// No problem, we'll never get here.
echo $a_string['port'];
}
if (is_array($an_array) && isset($an_array['port'])) {
// Ok!
echo $an_array['port']; // the_port
}
if (is_array($an_array) && isset($an_array['unset_key'])) {
// No problem again, we won't enter.
echo $an_array['unset_key'];
}
// Similar, but with array_key_exists
if (is_array($an_array) && array_key_exists('port', $an_array)) {
// Ok!
echo $an_array['port']; // the_port
}
isset
和之间有一些细微的差异array_key_exists
。例如,如果值$array['key']
是null
,isset
返回false
。array_key_exists
只会检查密钥是否存在。
$memcachedConfig
不是那个数组。演出var_dump($memcachedConfig);