TL; DR
Anda mencoba mengakses string
seolah-olah array, dengan kunci yang a string
. string
tidak akan mengerti itu. Dalam kode kita dapat melihat masalahnya:
"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.
Secara mendalam
Mari kita lihat kesalahan itu:
Peringatan: String ilegal mengimbangi 'port' di ...
Apa yang dikatakan? Dikatakan kami mencoba menggunakan string 'port'
sebagai offset untuk string. Seperti ini:
$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 ...
Apa yang menyebabkan ini?
Untuk beberapa alasan Anda mengharapkan array
, tetapi Anda memiliki string
. Hanya campuran. Mungkin variabel Anda diubah, mungkin tidak pernah menjadi array
, itu benar-benar tidak penting.
Apa yang bisa dilakukan?
Jika kita tahu kita harus memiliki array
, kita harus melakukan beberapa debugging dasar untuk menentukan mengapa kita tidak memiliki array
. Jika kita tidak tahu apakah kita akan memiliki array
atau string
, segalanya menjadi sedikit lebih rumit.
Apa yang bisa kita lakukan adalah segala macam pemeriksaan untuk memastikan kita tidak memiliki pemberitahuan, peringatan atau kesalahan dengan hal-hal seperti is_array
dan isset
atau 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
}
Ada beberapa perbedaan halus antara isset
dan array_key_exists
. Misalnya, jika nilai $array['key']
is null
, isset
return false
. array_key_exists
hanya akan memeriksa itu, yah, kuncinya ada .
$memcachedConfig
bukan array itu. Showvar_dump($memcachedConfig);