유령이 나왔다! PHP 문자열 배열 교차점

WBOY
풀어 주다: 2016-08-04 09:20:08
원래의
1047명이 탐색했습니다.

<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>
로그인 후 복사
로그인 후 복사

우선 불평부터 할게요(불평 안 하면 죽습니다!):

  1. $where은 문자열인데, 당신이 쓴 $where['title']은 대체 뭐죠?

  2. 문자열 내의 문자열에 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")를 할당합니다.

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿