답변:
heredoc 구문은 나에게 훨씬 깨끗하며 여러 줄 문자열에 유용하며 인용 문제를 피합니다. 예전에는 SQL 쿼리를 작성하는 데 사용했습니다.
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
나에게 이것은 따옴표를 사용하는 것보다 구문 오류가 발생할 확률이 낮습니다.
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
또 다른 요점은 문자열에서 큰 따옴표를 이스케이프 처리하지 않는 것입니다.
$x = "The point of the \"argument" was to illustrate the use of here documents";
위의 pProblem은 문서 구문과 반대로 방금 소개 한 구문 오류 (이스케이프 따옴표 누락)입니다.
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
약간의 스타일이지만 문자열 정의에 대한 단일, 이중 및 여기 문서의 규칙으로 다음을 사용합니다.
'no variables here'
"Today is ${user}'s birthday"
--ansi
호환 모드 에서 실행되지 않는 경우에만 작동 합니다. SQL 문자열 은 작은 따옴표 를 사용해야합니다.
SELECT * FROM "order" WHERE "table"='1'
Heredoc은 가독성과 유지 관리 성이 향상되어 인용 문자열에 대한 훌륭한 대안입니다. 따옴표를 피할 필요가 없으며 (좋은) IDE 또는 텍스트 편집기는 적절한 구문 강조를 사용합니다.
매우 일반적인 예 : PHP 내에서 밖으로 HTML 메아리 :
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// Sometime later
echo $html;
읽기 쉽고 유지 관리가 쉽습니다.
대안은 따옴표 붙은 문자열을 에코하는 것인데, 결국 이스케이프 된 따옴표를 포함하고 IDE는 해당 언어의 구문을 강조 표시하지 않아 가독성이 떨어지고 유지 관리가 더 어려워집니다.
상식에 대한 업데이트 된 답변
물론 SQL 쿼리가 HTML로 강조 표시되는 것을 원하지 않을 것입니다. 다른 언어를 사용하려면 다음 구문에서 언어를 변경하십시오.
$sql = <<<SQL
SELECT * FROM table
SQL;
우선, 모든 이유는 주관적입니다. 이유보다는 맛의 문제와 비슷합니다.
개인적으로 heredoc은 매우 쓸모가 없으며 때로는 HTML을 변수에 넣고 출력 버퍼링을 신경 쓰지 않고 HTML 전자 메일 메시지를 작성하려는 경우가 종종 있습니다.
서식은 일반적인 들여 쓰기 규칙에 맞지 않지만 큰 문제는 아닙니다.
//some code at it's proper level
$this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
$this->title = "Feedback";
//and so on
허용 된 답변의 예는 단지 부정 행위입니다.
실제로 문자열 예제는 속이지 않을 경우 더 간결합니다.
$sql = "SELECT * FROM $tablename
WHERE id in [$order_ids_list]
AND product_name = 'widgets'";
$x = 'The point of the "argument" was to illustrate the use of here documents';
내가 heredoc이 게으름이라고 말할지 모르겠다. 무엇이든 할 수있는 번거로운 방법이 항상 있기 때문에 무엇이든하는 것이 게으름이라고 말할 수 있습니다.
예를 들어, 특정 상황에서 파일에서 가져 와서 템플릿 바꾸기를 실행할 필요없이 내장 변수가있는 텍스트를 출력 할 수 있습니다. Heredoc을 사용하면 따옴표를 이스케이프하지 않아도되므로 표시되는 텍스트가 출력하는 텍스트입니다. 분명히 부정적인 점이 있습니다. 예를 들어 heredoc을 들여 쓸 수 없으며 특정 상황에서 특히 좌절 할 수 있습니다. 특히 통일 된 구문에 대한 고집이 있다면 말입니다.