TL; DR
Bạn đang cố gắng truy cập string
như thể đó là một mảng, với một khóa đó là a string
. string
sẽ không hiểu điều đó. Trong mã chúng ta có thể thấy vấn đề:
"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.
Chuyên sâu
Hãy xem lỗi đó:
Cảnh báo: offset 'cổng' bất hợp pháp trong ...
Nó nói gì? Nó nói rằng chúng tôi đang cố gắng sử dụng chuỗi 'port'
làm phần bù cho chuỗi. Như thế này:
$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 ...
Điều gì gây ra điều này?
Đối với một số lý do bạn mong đợi một array
, nhưng bạn có một string
. Chỉ là một hỗn hợp. Có thể biến của bạn đã được thay đổi, có thể nó không bao giờ là mộtarray
, nó thực sự không quan trọng.
Những gì có thể được thực hiện?
Nếu chúng ta biết chúng ta nên có một array
, chúng ta nên thực hiện một số gỡ lỗi cơ bản để xác định lý do tại sao chúng ta không có array
. Nếu chúng ta không biết liệu chúng ta có array
hay không string
, mọi thứ trở nên phức tạp hơn một chút.
Những gì chúng ta có thể làm là tất cả các loại kiểm tra để đảm bảo chúng ta không có thông báo, cảnh báo hoặc lỗi với những thứ như is_array
vàisset
hay 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
}
Có một số khác biệt tinh tế giữa isset
và array_key_exists
. Ví dụ, nếu giá trị của $array['key']
là null
, isset
trả về false
. array_key_exists
sẽ chỉ kiểm tra xem, tốt, chìa khóa tồn tại .
$memcachedConfig
không phải là mảng đó. Hiển thịvar_dump($memcachedConfig);