TL; DR
Estás intentando acceder a un string
como si fuera una matriz, con una clave que es un string
. string
No lo entenderé. En código podemos ver el 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.
A fondo
Veamos ese error:
Advertencia: la cadena ilegal compensa el 'puerto' en ...
¿Qué dice? Dice que estamos tratando de usar la cadena 'port'
como un desplazamiento para una cadena. Me gusta esto:
$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é causa esto?
Por alguna razón esperabas un array
, pero tienes un string
. Solo una confusión. Tal vez su variable fue cambiada, tal vez nunca fue unarray
, realmente no es importante.
¿Qué se puede hacer?
Si sabemos que deberíamos tener un array
, debemos hacer una depuración básica para determinar por qué no tenemos un array
. Si no sabemos si tendremos un array
o string
, las cosas se vuelven un poco más complicadas.
Lo que podemos hacer es todo tipo de comprobación para asegurarse de que no tenemos avisos, advertencias o errores con cosas como is_array
y isset
o 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
}
Hay algunas diferencias sutiles entre isset
y array_key_exists
. Por ejemplo, si el valor de $array['key']
es null
, isset
devuelve false
. array_key_exists
solo verificará que, bueno, la clave existe .
$memcachedConfig
no es esa matriz. Espectáculovar_dump($memcachedConfig);