TL; DR
Sie versuchen, auf string
ein Array zuzugreifen, als wäre es ein Array mit einem Schlüssel, der a ist string
. string
werde das nicht verstehen. Im Code können wir das Problem sehen:
"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.
In der Tiefe
Lassen Sie uns diesen Fehler sehen:
Warnung: Unzulässiger String-Offset 'Port' in ...
Was sagt es? Es heißt, wir versuchen, die Zeichenfolge 'port'
als Offset für eine Zeichenfolge zu verwenden. So was:
$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 ...
Was verursacht das?
Aus irgendeinem Grund haben Sie eine erwartet array
, aber Sie haben eine string
. Nur eine Verwechslung. Vielleicht wurde Ihre Variable geändert, vielleicht war es nie eine array
, es ist wirklich nicht wichtig.
Was kann getan werden?
Wenn wir wissen, dass wir eine haben sollten array
, sollten wir einige grundlegende Fehlerbehebungen durchführen, um festzustellen, warum wir keine haben array
. Wenn wir nicht wissen, ob wir ein array
oder haben werdenstring
, werden die Dinge etwas schwieriger.
Was wir tun können , sind alle Arten von Überprüfungen, um sicherzustellen, dass wir keine Hinweise, Warnungen oder Fehler mit Dingen wie is_array
und isset
oder haben 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
}
Es gibt einige subtile Unterschiede zwischen isset
und array_key_exists
. Wenn beispielsweise der Wert von $array['key']
ist null
, wird isset
zurückgegeben false
. array_key_exists
Ich werde nur überprüfen, ob der Schlüssel existiert .
$memcachedConfig
ist das nicht Array. Showvar_dump($memcachedConfig);