[php] PHP에서 heredoc을 사용하면 어떤 이점이 있습니까? [닫은]

PHP에서 heredoc 을 사용하면 어떤 이점이 있으며 예제를 보여줄 수 있습니까?



답변

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"
  • 여기에 멀티 라인 포맷이 필요한 문자열과 변수 보간을위한 문서.

답변

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;


답변

일부 IDE는 heredoc 문자열의 코드를 자동으로 강조하므로 XML 또는 HTML에 heredoc을 사용하면 시각적으로 매력적입니다.

따옴표 문자를 신경 쓰지 않아도되고 단순히 XML을 붙여 넣을 수 있기 때문에 개인적으로 XML의 더 긴 부분을 좋아합니다.


답변

우선, 모든 이유는 주관적입니다. 이유보다는 맛의 문제와 비슷합니다.

개인적으로 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을 들여 쓸 수 없으며 특정 상황에서 특히 좌절 할 수 있습니다. 특히 통일 된 구문에 대한 고집이 있다면 말입니다.


답변