TL; DR
Próbujesz uzyskać dostęp do stringtablicy, jakby to była tablica, z kluczem, który jest string. stringnie zrozumie tego. W kodzie możemy zobaczyć problem:
"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.
Dogłębnie
Zobaczmy ten błąd:
Ostrzeżenie: niedozwolony przesunięcie ciągu „port” w ...
Co to mówi? Mówi, że próbujemy użyć łańcucha 'port'jako przesunięcia łańcucha. Lubię to:
$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 ...
Co to powoduje?
Z jakiegoś powodu spodziewałeś się array, ale masz string. Po prostu pomyłka. Może twoja zmienna została zmieniona, może nigdy nie byłaarray , to naprawdę nie jest ważne.
Co można zrobić?
Jeśli wiemy, że powinniśmy mieć array, powinniśmy wykonać podstawowe debugowanie, aby ustalić, dlaczego nie mamy array. Jeśli nie wiemy, czy będziemy mieli, arraylub string, sytuacja stanie się nieco trudniejsza.
Co nam może zrobić, to wszelkiego rodzaju kontroli w celu zapewnienia, że nie mamy Zawiadomienia, ostrzeżenia lub błędy z rzeczy, jak is_arrayi issetalbo 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
}
Istnieją pewne subtelne różnice między isseti array_key_exists. Na przykład, jeśli wartość $array['key']wynosi null, issetzwraca false. array_key_existspo prostu sprawdzi, czy klucz istnieje .
$memcachedConfignie jest to tablica. Showvar_dump($memcachedConfig);