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);