2012-12-16 8 views
2
include ($_GET['p'] == 'home') ? 'pages/home.php' : NULL; 

오류 준다() 함수를 포함 : 나는 정의되지 않은 인덱스를 이해삼항 연산자 오류가

Notice: Undefined index: p in /var/www/index.php on line 38
Warning: require(): Filename cannot be empty in /var/www/index.php on line 38
Fatal error: require(): Failed opening required '' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/index.php on line 38

을, 그런데 왜 나는 다른 오류는 무엇입니까? 이 줄 :

include (!isset($_GET['p'])) ? 'pages/home.php': NULL; 

잘 작동합니다. 첫 번째 코드는 if 문에서 잘 작동합니다 (이해할 수있는 정의되지 않은 색인은 제외).

+0

주의 사항은 매우 낮습니다. 대부분의 사람들은 그들을 무시하거나 커플을 얻으면 괴롭히지 않습니다 (나는 반대합니다). 치명적인 오류가 문제입니다. –

+0

오류가 필요하다고 말하면 코드에 포함되어 있습니다. 귀하의 질문을 수정하십시오, 그것은 분명히 잘못된 정보를 제공하고 있습니다. 또한 오류 메시지는 매우 명확합니다. 나는 그 중 어떤 부분이 당신에게 이해가되지 않을지 궁금해. 더 나은 답변을 제공하는 것이 좋습니다. 우리는 또한 여러분에게 유용한 참고 자료가 있습니다 : [참고 - PHP에서이 오류는 무엇을 의미합니까?] (http://stackoverflow.com/q/12769982/367456) - 가지고있는 모든 메시지를 다루고 있습니다. 주어진. – hakre

+0

링크를 제공해 주셔서 감사합니다. 나는 include를 사용하고 있었다. 필요하지 않은 것은 출력 된 에러가 require와 관련이있다. – tgun926

답변

6

include 포함 할 파일의 경로를 나타내는 문자열이 필요합니다. 그래서 NULL will get converted to string that results in an empty string. 결과적으로 빈 문자열로 참조되는 파일을 포함하면 경고가 발생합니다.

단순히 if 대신 사용

if (!isset($_GET['p'])) { 
    include 'pages/home.php'; 
} 
+0

오, PHP의 3 진 연산자가 계속 진행하기 전에 두 경우를 모두 확인합니까? 고맙습니다. – tgun926

+0

@helpabeginner 아니요. 주로 $ _GET [ 'p'] == 'home' '이 거짓 일 경우'null '을 반환하는 조건식 때문입니다. 그리고 그것은 당신이 관찰 한 사건을 초래할 것입니다. – Gumbo

+0

그건 의미가있어, 고마워! – tgun926

0

그렇게하지 마십시오! 대신 다음과 같이 시도하십시오.

(isset($_GET['p']) && $_GET['p'] === 'home') ? include 'pages/home.php' : ''; 
+0

이 코드는 아무 이유없이'' ''표현을 평가하는 쓸데없는 부작용이 있습니다. –

+0

@Jack 나는 보통 당신과 동의 하겠지만, OP는 분명히 그의 코드를 한 줄로 원하고있다. 그렇지 않으면 간단한 if 문을 수행하기 위해 3 진 성명을 사용하지 않을 것입니다. – PhearOfRayne

+0

이 코드는 작동하지 않습니다.'include'는 함수가 아닙니다. – hakre

관련 문제