2011-02-07 4 views
1

모든 오류보고 기능을 사용하여 정의되지 않은 색인을 정리했습니다. 앱을 더 깔끔하게 만듭니다. 나는 호기심 행동을 눈치 챘 :정의되지 않은 색인은 얼마나 엄격합니까?

내가 if ($a['nothere'])을 할 경우 $a = array('test' => false, 'foo' => 'bar'), 나는 제대로 Undefined index: nothere의 통지를 얻을 :

것은 이제 나는 다음과 같은 배열을 가정 해 봅시다.

그러나 내가 if ($a['test']['nothere']) 일 경우, 이 아닙니다. 조금도. nothere에도 불구하고 $a['test']의 색인이 아닙니다.

이제 $a['test'] = array('baz' => 'poof')을 실행하면 if ($a['test']['nothere'])을 실행하면이 실행됩니다.

정의되지 않은 인덱스 검사는 빈 배열의 인덱스를 확인하지 않습니까? 이것은 PHP 5.2.8에 있습니다.

+1

[] 문자열 액세스 구문 및 유형 저글링 때문일 가능성이 큽니다. '$ a = array ('test'=> array(), 'foo'=> 'bar')'오류 메시지가 나타나면 –

+0

hah, 이전 copyedit 인 @Piskvor에 의한 기이 한 구조를 편집 해 주셔서 감사합니다. : P – Andrew

+0

아, 그래서 if ($ a [ 'test'] [ 'nothere'])'를 할 때'if ($ a [ 'test']) 그것은'거짓'과 단락으로 풀리는가? – Andrew

답변

4

까다로운 유형의 저글링 때문입니다. $ [[test]]가 [empty] 문자열로 캐스팅 된 다음 '아무데도'0으로 캐스팅 된 후 PHP는 빈 문자열에서 0의 기호를 찾으려고 시도합니다. 변수 검색이 아닌 부분 문자열 연산이되므로 오류가 발생하지 않습니다. http://php.net/manual/en/language.types.type-juggling.php

내 경험에서 호기심 예 :

저런, 한 남자가 같은 말한다
이 하이퍼 링크 index.php?sname=p_edit&page=0를 통해 요청되는, 코드

if (isset($_GET['sname'])) { $page['current'] = $_GET['sname'].'.php'; }; 
echo $page['current']; 

단지 하나 개의 문자 생성 "p"

나는 그 결과로 끝나는 6 단계와 2 가지 타입의 캐스팅을 세었다.
(힌트 :이 질문을 한 가난한 사람은 전역 등록이 있습니다)

+0

아하. 나를 위해 일한다! – Andrew

+0

+1 allso 변수를 검사 할 때 isset을 사용해야합니다 (배열, 문자열 등) –