TL; DR
stringA'ya, bir anahtarmış gibi bir dizi gibi erişmeye çalışıyorsunuz string. stringbunu anlamayacak. Kodda sorunu görebiliriz:
"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.
Derinlemesine
Şu hatayı görelim:
Uyarı: Geçersiz dize uzaklığı 'bağlantı noktası' ...
Ne diyor? 'port'Dizeyi, bir dizenin uzaklığı olarak kullanmaya çalıştığımızı söylüyor . Bunun gibi:
$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 ...
Buna ne sebep olur?
Bir nedenden dolayı beklediğiniz bir array, ama bir string. Sadece bir karma. Belki de değişkeniniz değiştirildi, belki de hiç olmadı, arraygerçekten önemli değil.
Ne yapılabilir?
Biz ise biliyoruz biz olması gereken array, biz bir yok nedenini belirlemek için bazı temel hata ayıklama yapmalıdır array. Bir arrayya da daha fazla olup olmadığımızı bilmiyorsak string, işler biraz daha hileli hale gelir.
Ne yapabilirsiniz yaparsak gibi şeyler bildirimler, uyarı ve hataları yok sağlamak için kontrol her türlü olduğunu is_arrayve issetya 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
}
issetVe arasında bazı ince farklar vardır array_key_exists. Örneğin, değeri ise $array['key']olan null, issetdöner false. array_key_existssadece anahtarın var olduğunu kontrol edecek .
$memcachedConfigbu dizi değil. Göstervar_dump($memcachedConfig);