2017-11-19 21 views
-1

코드 아래 고려 : 또한큰 따옴표 안에 하나의 배열 표기법을 사용하면 구문 분석 오류가 발생하는 이유는 무엇입니까?

**Parse error:** syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) 

나는 프로그램과 같은 이상 작성하는 경우 :

<?php 
    $arr = array('fruit' => 'apple', 'veggie' => 'carrot'); 

    define('fruit', 'veggie'); 

    print "Hello {$arr['fruit']}"; //This works 

    print "Hello $arr['fruit']"; //This doesn't work 
?> 

내가 두 번째는 작업을 다음과 같이 나에게 구문 분석 오류를 포기하지 않을 이유를 이해할 수 아니에요 그 아래에 내가 죽을 때가있다. 첫 번째 실행 라인 다음에 여전히 작동하지 않는 라인을 넣은 후에도 나는 같은 에러를 보게된다.

<?php 
    $arr = array('fruit' => 'apple', 'veggie' => 'carrot'); 

    define('fruit', 'veggie'); 

    print "Hello {$arr['fruit']}"; 
    die; 
    print "Hello $arr['fruit']"; 
?> 

나는 이것을 전혀 얻지 못했습니다. 그것은 컴파일 후 첫 번째 라인을 인쇄해야하는데, 그 다음 라인이 컴파일 중에 고려되어서는 안되지만 첫 번째 라인의 실행을 금지하고있다.

왜 그렇습니까?

+1

큰 따옴표로 묶은 문자열 안에 작은 따옴표를 제거하십시오.''Hello $ arr [fruit] '' –

+0

@MagnusEriksson : 나는 그것이 작동한다는 것을 알고 있지만, 배열 인덱스 값과 동일한 이름으로 정의 된 상수가 있다고 가정하십니까? 그러면 지저분해질 것입니다. 그래서 나는 그것이 올바른 접근이라고 생각하지 않습니다. – user2839497

+1

중괄호'{}'없이는 큰 따옴표로 묶인 문자열에서'fruit'를 상수로 구문 분석하지 않습니다. 작은 따옴표를 추가하는 데 필요한 중괄호 안에 만 있습니다. 이 컨텍스트에서 중괄호를 사용하는 것을 "복잡한 구문"이라고합니다. 그 안에 문자열과는 다른 PHP 변수/배열/객체를 작성할 수 있습니다. –

답변

1

구문 분석 오류는 큰 따옴표로 묶은 문자열에서 변수를 구문 분석하기 때문에 발생합니다. 그 내용은 here입니다.

두 번째 예제에서 PHP는 $arr을 대괄호가 하위 문자열 종류의 작업을 수행하는 문자열로 해석합니다. 이 시나리오에서는 작은 따옴표가 없어서 파싱 오류가 발생합니다.

두 번째 질문이 있습니다. PHP가 PHP 파일을 구문 분석하는 동안 구문 분석 오류가 발생합니다. PHP는 die-statement 이후에 오는 것을 아직 알지 못하기 때문에 (예를 들어, 스크립트의 다른 부분에서 호출 할 함수가있을 수 있습니다.) 모든 줄을 구문 분석해야합니다. 따라서 구문 분석 오류는 아직 실행 논리를 신경 쓰지 않습니다.