2017-11-18 19 views
0

나는 PHP 7.1.11PHP가 heredoc 구문을 사용하여 클래스 속성을 초기화하지 못하게하는 이유는 무엇입니까? PHP 매뉴얼에서 언급 한 바와 같이

을 사용하고 있습니다 :

Heredocs can not be used for initializing class properties. Since PHP 5.3, this limitation is valid only for heredocs containing variables.

는 위의 문장은 클래스 속성 히어 닥 구문을 사용하여 초기화 할 수 없습니다 말하는 PHP 5.3 이후 .

PHP 7.1.11을 사용하고 heredoc 구문을 사용하여 클래스 속성을 초기화하고 있지만 오류가 발생하지 않았으며 클래스 속성이 초기화되었습니다.

왜 그렇습니까?

은 내 아래의 작업 코드를 살펴 보자 :

<!DOCTYPE HTML> 
<html> 
    <head> 
    <title>Example</title> 
    </head> 
    <body> 
    <?php 
    class foo { 
     public $bar = <<<EOT 
        barti 
EOT; 
    } 

    $j = new foo(); 
    echo $j->bar; 
    ?> 
    </body> 
</html> 

위의 코드의 출력은 이미 소스로

barti 
+1

'PHP 5.3 이후로,이 제한은 변수가있는 heredoc에만 유효합니다. '귀하의 예제에는 변수가 포함되어 있지 않으므로 언급 된 제한에 포함되지 않습니다. –

+0

@ManuelMannhardt : 적절한 작업 코드 예제로 이것을 증명해 주시겠습니까? 실제로 "변수를 포함한 heredocs"는 무엇을 의미합니까? 그런 종류의 예를 들어주세요. – user2839497

+0

@ user2839497 당신이 찾고있는 예제가 실제로이 경우에는 _non-working_ 코드 일 것입니다. –

답변

1

입니다 since PHP 5.3, this limitation is valid only for heredocs containing variables을 지적한다. 예제 코드에는 변수가 포함되어 있지 않으므로 설계된대로 작동합니다. 아래 그림과 같이


그러나, 무엇 는 히어 닥에서 변수를 사용하고 작동하지 않습니다

Fatal error: Constant expression contains invalid operations in [...] 

참고 :

class foo { 
     public $bar = <<<EOT 
        barti $someVariable // nor does {$someVariable} 
EOT; 
    } 

    $j = new foo(); 
    echo $j->bar; 

이 오류가 발생합니다

이 '문제'는 heredocs에서 가져온 것이 아닙니다. 클래스 속성을 함수 나 변수의 결과로 초기화 할 수 없습니다. 그냥 heredoc없이 시도하십시오 :

class foo { 

    public $bar = $test; 
} 

$j = new foo(); 
echo $j->bar; 

이 코드를 실행하면 똑같은 오류가 발생합니다.

+0

heredoc 구문을 사용하여 클래스 속성 초기화시 변수/s를 사용하면 PHP에서 치명적인 오류가 발생합니까? 그러나 heredoc 구문으로 일반 변수를 초기화하면 PHP에서 오류가 발생하지 않습니까? 이 경우 변수 (이스케이프 시퀀스 문자가있는 경우)는 heredoc 식별자 사이에서 확장됩니까? – user2839497

+0

그것 heredoc (전용) 건 아니야. 변수 나 함수의 결과로 속성을 설정할 수 없습니다. 내 대답에 그것을 추가하겠습니다. –