TL; DR
Você está tentando acessar um string
como se fosse uma matriz, com uma chave que é um string
. string
nã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 array
oustring
, 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_array
e isset
ou 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 isset
e array_key_exists
. Por exemplo, se o valor de $array['key']
for null
, isset
retornará false
. array_key_exists
apenas verificará se a chave existe .
$memcachedConfig
não é essa matriz. Showvar_dump($memcachedConfig);