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'як зміщення для рядка. Подобається це:
$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);