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


196

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


4
대안이 heredocs보다 낫다는 강력한 이유는 없습니다
Shakti Singh

18
나는 이것을보다 건설적인 것으로 편집했고 커뮤니티 위키를 매우 주관적이므로 질문했습니다. 참고로 커뮤니티는 여전히 닫을 수 있습니다. 양질의 답변을 받고 있기 때문에 커뮤니티를 열어두기로 선택했습니다.
Tim Post

9
이 질문이 왜 건설적인 것으로 간주되지 않습니까?
Ambo100

답변:


218

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

40
SQL 예제에 대한 Nitpick : 먼저 큰 따옴표를 사용해서는 안됩니다. 이는 MySQL에서만 작동하며 서버가 --ansi호환 모드 에서 실행되지 않는 경우에만 작동 합니다. SQL 문자열 작은 따옴표 사용해야합니다.
마리오

17
@mario 그것은 일반적으로 큰 따옴표를 사용하는 것에 대한 문제를 설명하기위한 것이지 SQL의 세부 사항에 관한 것이 아닙니다
Wes

4
말할 것도없이 변수를 쿼리에 직접 배치하는 것은 나쁘고 나쁜 방법입니다. :-P
당신의 상식

5
@Wes와 @mario 이것은 ANSI SQL입니다.SELECT * FROM "order" WHERE "table"='1'
programaths

11
"변수를 쿼리에 직접 배치하는 것은 나쁜 나쁜 방법이라고 말할 수 없습니다." 이것은 사실이 아닙니다. 확인되지 않은 입력을 SQL 문에 배치하는 것은 "나쁜 방식"입니다. SQL 문에 변수를 배치해야하는 경우가 있습니다.
vogomatix

67

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;

1
PHP의 " Pscape from PHP "기능 을 알고 있습니까?
당신의 상식

5
PHP에서 이스케이프 처리하는 것은 좋지만, 구문 강조 표시가 끊어 질 때 많은 것들을 에코하는 경우 PHP에서 간단하게 이스케이프 처리하여 더 많은 문자를 입력해야하며 PHP는 단일 에코 대신 실행할 명령이 더 많습니다. 또한 Heredoc 문자열을 변수로 설정하고 나중에 에코 할 수 있습니다. HTML에서 PHP를 이스케이프 처리하면 인쇄되어 출력됩니다. 나중에 저장할 수 없습니다.
Jake Wilson

2
1. 출력 버퍼링을 사용하여 출력을 저장할 수 있습니다. 2. 첫 번째 예에서 에코를 사용하고있었습니다. 3. (좋은) IDE 또는 텍스트 편집기 PHP에서 이스케이프를 사용할 때 HTML 강조 표시를 중단하지 마십시오 . 4. HEREDOC의 구문에서 어떤 IDE가 강조되며 어떤 언어 규칙이 사용됩니까? HTML 쿼리로 강조 표시된 SQL 쿼리를 볼 수 있습니까?
당신의 상식

1
Heredoc은 PHP 문자열입니다. 물론 문자열에는 컨트롤 구조를 사용할 수 없습니다. php.net/manual/en/language.types.string.php
Jake Wilson

11
Heredoc이 HTML 문자열에만 적용한다는 것을 오해한다고 생각합니다. Heredoc은 단순히 문자열을 HTML 또는 SQL 쿼리 또는 원하는 것으로 정의하는 대체 방법입니다. 그것들은 작성하고 유지하기가 더 쉬우 며, 위의 Wes의 대답은 분명히 명백합니다 (올바른 구문 강조 표시가 있으면 NetBeans 실패에 대해 나에게 불평하지 마십시오). 커뮤니티 위키 질문에 대한 답을 다운 투표하는 것에 왜 그렇게 구부러진 것 같지 않은지 모르겠습니다 ... 믿거 나 말거나, 원래 PHP 개발자는 Heredoc을 PHP에 포함했을 수도 있습니다. .
제이크 윌슨

8

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

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


6

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

개인적으로 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';

3

내가 heredoc이 게으름이라고 말할지 모르겠다. 무엇이든 할 수있는 번거로운 방법이 항상 있기 때문에 무엇이든하는 것이 게으름이라고 말할 수 있습니다.

예를 들어, 특정 상황에서 파일에서 가져 와서 템플릿 바꾸기를 실행할 필요없이 내장 변수가있는 텍스트를 출력 할 수 있습니다. Heredoc을 사용하면 따옴표를 이스케이프하지 않아도되므로 표시되는 텍스트가 출력하는 텍스트입니다. 분명히 부정적인 점이 있습니다. 예를 들어 heredoc을 들여 쓸 수 없으며 특정 상황에서 특히 좌절 할 수 있습니다. 특히 통일 된 구문에 대한 고집이 있다면 말입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.