TL; DR
Вы пытаетесь получить доступ к, string
как если бы это был массив, с ключом, который является 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' в ...
О чем это говорит? Он говорит, что мы пытаемся использовать строку '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
или string
, все станет немного сложнее.
Что мы можем сделать, это все виды проверок, чтобы убедиться, что у нас нет уведомлений, предупреждений или ошибок с такими вещами, как is_array
и 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);