<code>$where = '1=1'; $keyword = $_GET['keyword']; if($keyword) { $where['title'] = array('like', "%$keyword%"); } var_dump($where); 竟然打印出来:A=1 到底是怎么样的转换流程?</code>
<code>$where = '1=1'; $keyword = $_GET['keyword']; if($keyword) { $where['title'] = array('like', "%$keyword%"); } var_dump($where); 竟然打印出来:A=1 到底是怎么样的转换流程?</code>
우선 불평부터 할게요(불평 안 하면 죽습니다!):
$where
은 문자열인데, 당신이 쓴 $where['title']
은 대체 뭐죠?
문자열 내의 문자열에 array
을 할당하는 것은 도대체 무엇입니까?
질문에서 기타 쓸모없는 코드를 제거한 후 질문을 단순화했습니다.
<code>$where = '1=1'; $where['title'] = array(); var_dump($where);</code>
위의 불만사항에 해당하며, 단계별로 살펴보겠습니다. $where['title']
은 문자열 $where
에 아래 첨자 'title'
가 있는 문자를 표현합니다. 0 -문자열 길이 빼기 1]이면 PHP는 실제로 잘못된 첨자에 대해 $where[0]
과 동일한 효과를 갖습니다.
이 문제는 다음과 같이 더욱 단순화됩니다.
<code>$where = '1=1'; $where[0] = array(); var_dump($where);</code>
$where[0]
가 실제로 $where
문자열의 첫 번째 문자를 참조한다는 것을 이해했기 때문에 다음은 제가 불평하고 싶은 것입니다. "array
을 문자열의 문자열에 할당합니다. 이게 도대체 "
테스트를 해보자:
<code>var_dump( (string)array() );</code>
어떤 결과가 나올 것 같나요?
<code>PHP Notice: Array to string conversion in /home/nfer/temp.php on line 8 string(5) "Array"</code>
그러면 여기서 $where[0] = array();
는 Array
문자열의 첫 번째 문자에 $where
문자열을 할당하면 이해하기 쉽습니다.
빙고, 출력은 string(3) "A=1"
마지막으로 유령 코드도 작성하겠습니다.
<code>$where = 'A=1'; $keyword = $_GET['keyword']; if($keyword) { $where['title'] = $keyword == 123; } var_dump($where);</code>
결과가 어떻게 될 것 같나요?
1.$where = 1, 맞습니다. 우선 문자열입니다.
2. 그런 다음 $where를 배열로 처리하고 $where['title'] = array('like',"xxx")를 할당합니다.