TL; DR
Você está tentando acessar um stringcomo se fosse uma matriz, com uma chave que é um string. stringnão vai entender isso. No código, podemos ver o problema:
"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.
Em profundidade
Vamos ver esse erro:
Aviso: deslocamento ilegal de cadeia 'port' in ...
O que isso diz? Diz que estamos tentando usar a string 'port'como um deslocamento para uma string. Como isso:
$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 ...
O que causa isso?
Por alguma razão, você esperava um array, mas você tem um string. Apenas uma confusão. Talvez sua variável tenha sido alterada, talvez nunca tenha sido umaarray , não é realmente importante.
O que pode ser feito?
Se sabemos que devemos ter um array, devemos fazer algumas depurações básicas para determinar por que não temos um array. Se não sabemos se teremos um arrayoustring , as coisas ficam um pouco mais complicadas.
O que podemos fazer é todo tipo de verificação para garantir que não tenhamos avisos, avisos ou erros com coisas como is_arraye 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
}
Existem algumas diferenças sutis entre issete array_key_exists. Por exemplo, se o valor de $array['key']for null, issetretornará false. array_key_existsapenas verificará se a chave existe .
$memcachedConfignão é essa matriz. Showvar_dump($memcachedConfig);