첫걸음 프로그래머 일기/php

php heredoc 히어닥 nowdoc 나우닥

참참. 2021. 5. 28. 16:08

언젠가 한번쯤은 들어봤던 것 같은데, 하도 안 쓰다보니 존재 자체도 완전 까맣게 잊고 있어서 충격.
heredoc, nowdoc은 php에서 문자열, string 을 표현할 때 사용하는 방법 중 하나다.

php에서 문자열을 표현할 때 보통 큰 따옴표(double quotes), 작은 따옴표(single quotes)를 이용하고,
큰따옴표를 쓸 때와 작은따옴표를 쓸 때 차이가 있다.
대표적으로 큰따옴표 안에 나오는 $variables 변수는 변수가 가지고 있는 값으로 출력되고,
작은따옴표 안에 나오는 변수는 변수가 갖고 있는 값이 아니라 그냥 $variables라고 출력된다.

$foo = 'world';
echo "hello $foo";
//결과: hello world

echo 'hello $foo';
//결과: hello $foo

heredoc, nowdoc은 줄바꿈을 표현하여 여러 줄로 된 긴 문자열을 표현할 때 유용하다.
heredoc의 문법syntax은

echo <<<WORDYOUWANT
hello, world<br/>
bye, world<br/>
anything you want to say
<html>
<head>
</head>
<body>
<h1> whatever </h1>
</body>
</html>
WORDYOUWANT;

위처럼 '<<<' 뒤에다 아무 원하는 영어대문자로 이루어진 단어를 식별자identifier로 적음으로써 시작하고,
마지막에는 처음에 <<<뒤에 적었던 식별자를 쓰고 ;(세미콜론)으로 닫아주면 끝난다.

(* 주의: "<<<IDENTIFIER"의 앞에 뭐가 오든 상관없지만, 그 뒤에는 아무것도 오지 않도록 바로 줄바꿈(개행, 엔터) 해줘야한다. 마지막의 IDENTIFIER;도 그 행에는 그것만 입력해서 닫아야한다.)

//올바른 예
$save = <<<EOT
아무말 저런말 이런말
EOT;

//에러
$error1 = <<<HEY what
are you doing?
HEY;

//에러
$error2 = <<<ERROR
what are you
doing ERROR;

nowdoc은 heredoc의 문법에서 맨 처음 <<<뒤에 식별자identifier를 적어줄 때 작은따옴표로 감싸서 적어주면 된다.(마지막 끝날 때에는 식별자에 작은따옴표를 붙이지 않는다, 처음 시작할 때만 붙여주면 nowdoc이 된다.)

heredoc은 큰따옴표처럼, nowdoc은 기존의 작은따옴표로 문자열을 표시할 때처럼 동작한다.

echo <<<'NOWDOC'
heredoc과 nowdoc은 큰따옴표와 작은따옴표의 차이를 갖고 있다
NOWDOC;

도움)
https://pronist.tistory.com/16#%EB%B3%80%EC%88%98%EC%9D%98%20%EC%8A%A4%EC%BD%94%ED%94%84
https://andy-carter.com/blog/what-are-php-heredoc-nowdoc
https://zetawiki.com/wiki/PHP_%ED%9E%88%EC%96%B4%EB%8B%A5_heredoc