TL; DR
Vous essayez d'accéder à un stringcomme s'il s'agissait d'un tableau, avec une clé qui est un string. stringne comprendra pas cela. Dans le code, nous pouvons voir le problème:
"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.
En profondeur
Voyons cette erreur:
Avertissement: décalage de chaîne non autorisé 'port' dans ...
Ça dit quoi? Il dit que nous essayons d'utiliser la chaîne 'port'comme décalage pour une chaîne. Comme ça:
$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 ...
Qu'est-ce qui cause cela?
Pour une raison quelconque, vous vous attendiez à un array, mais vous avez un string. Juste une confusion. Peut-être que votre variable a été modifiée, peut-être qu'elle n'a jamais été un array, ce n'est vraiment pas important.
Ce qui peut être fait?
Si nous savons que nous devrions avoir un array, nous devrions effectuer un débogage de base pour déterminer pourquoi nous n'avons pas de fichier array. Si nous ne savons pas si nous aurons un arrayou string, les choses deviennent un peu plus délicates.
Ce que nous pouvons faire, c'est toutes sortes de vérifications pour nous assurer que nous n'avons pas d'avis, d'avertissements ou d'erreurs avec des choses comme is_arrayet issetou 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
}
Il existe des différences subtiles entre issetet array_key_exists. Par exemple, si la valeur de $array['key']est null, issetrenvoie false. array_key_existsva juste vérifier que, eh bien, la clé existe .
$memcachedConfign'est évidemment pas ce tableau. Spectaclevar_dump($memcachedConfig);