TL; DR
string
a 키가있는 배열 인 것처럼 a에 액세스하려고 합니다 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'...
그것은 무엇을 말하는가? 문자열을 문자열 '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
또는 string
상황이 조금 까다된다.
우리가 할 수있는 일은 온갖 종류의 검사를 통해 우리가 is_array
and 및 isset
/ 와 같은 것에 대한 통지, 경고 또는 오류가 없는지 확인합니다 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);