TL; DR
stringa 키가있는 배열 인 것처럼 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_arrayand 및 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);