TL; DR
あなたはstring
それが配列であるかのように、であるキーでにアクセスしようとしていますstring
。string
それは理解しません。コードで問題を確認できます:
"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.
深く
そのエラーを見てみましょう:
警告:不正な文字列オフセット 'port' in ...
それは何と言いますか?これは、文字列を文字列'port'
のオフセットとして使用しようとしていることを示しています。このような:
$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 ...
何が原因ですか?
何らかの理由でを期待していましたarray
が、を持っていstring
ます。単なる取り違え。たぶんあなたの変数は変更されました、多分それは決してありませんでしたarray
、それは本当に重要ではありません。
何ができますか?
が必要なことがわかっている場合はarray
、基本的なデバッグを行って、なぜがないのかを判断する必要がありarray
ます。array
or があるかどうかわからない場合はstring
、少しトリッキーになります。
私たちができることは、is_array
and isset
やorのようなものに関する通知、警告、エラーがないことを確認するためのあらゆる種類のチェックです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
}
との間には微妙な違いがisset
ありarray_key_exists
ます。例えば、の値は次の場合$array['key']
であるnull
、isset
戻りますfalse
。array_key_exists
キーが存在することを確認するだけです。
$memcachedConfig
その配列ではありません。ショーvar_dump($memcachedConfig);