echo는 텍스트를 출력합니다. 문자열을 출력하려면 echo "Hello";, 변수를 포함하려면 echo "Hello, $name";, 여러 값을 이어서 출력하려면 echo $a, $b;를 씁니다. echo가 출력한 것이 브라우저에 보이는 페이지, 또는 터미널에 보이는 텍스트가 됩니다.
첫 줄은 보간(변수가 큰따옴표 안에 들어 있음)을, 두 번째 줄은 . 연산자로 문자열 연결을, 세 번째 줄은 쉼표로 구분한 세 값을 사용합니다. 세 줄 모두 같은 종류의 결과를 출력합니다.
HTML 출력
웹 페이지에서 echo는 보통 HTML을 출력합니다. 브라우저는 그 텍스트를 받아 태그를 렌더링합니다. Run을 누르면 Page 탭에 렌더링된 결과가 보입니다.
마지막 줄은 작은따옴표를 써서 class="note"의 큰따옴표를 이스케이프할 필요가 없습니다. 작은따옴표 안에서는 변수가 치환되지 않으므로 고정 텍스트에 쓰세요. 값이 방문자에게서 왔다면(폼, URL) HTML을 주입할 수 없도록 htmlspecialchars를 거쳐 출력하세요. htmlspecialchars 페이지를 참고하세요.
짧은 echo 태그 <?=
HTML 파일 안에서 <?= $value ?>는 <?php echo $value; ?>의 짧은 형태입니다. 템플릿을 읽기 쉽게 유지해 줍니다.
짧은 echo 태그는 항상 사용할 수 있습니다. 또 다른 짧은 태그인 php 없는 <?는 설정에 따라 달라지므로 쓰지 않는 것이 좋습니다.
여러 값과 줄바꿈 출력
echo는 줄바꿈을 추가하지 않습니다. 터미널에서는 "\n"(큰따옴표 안)이나 상수 PHP_EOL을 추가하세요. HTML에서는 소스의 줄바꿈이 화면에 보이지 않으므로 <br>이나 별도의 요소를 쓰세요.
쉼표와 점은 같은 출력을 냅니다. 쉼표를 쓰면 echo가 값을 차례로 출력하고, 점을 쓰면 PHP가 먼저 문자열 하나를 만든 뒤 출력합니다. 줄바꿈은 별도 페이지에서 다룹니다: PHP 줄바꿈.
echo와 print 비교
print는 더 오래된 형제입니다. 값 하나를 출력하고 항상 1을 반환하므로 표현식 안에 쓸 수 있습니다. echo는 값을 개수 제한 없이 받고 아무것도 반환하지 않습니다.
echo | print | |
|---|---|---|
| 값 | 하나 이상, 쉼표로 구분 | 정확히 하나 |
| 반환값 | 없음(문장임) | 1 |
| 표현식 안에서 사용 | 불가 | 가능, $ok = print "x"; |
| 주 용도 | 거의 모든 곳 | 드묾 |
printf는 또 다릅니다. printf("%05.2f", 3.14159)처럼 자리표시자로 값을 서식화하며, sprintf 페이지에서 다룹니다.
배열이나 객체 출력
echo는 문자열과 문자열로 변환되는 값(숫자, 불리언, null)만 출력합니다. 배열은 변환되지 않습니다. 내 PHP에서는 경고와 함께 Array라는 단어가 출력됩니다.
PHP Warning: Array to string conversion in /home/index.php on line 3
Array
내용을 보려면 용도에 맞는 함수를 고르세요.
객체는 더 엄격합니다. 클래스에 __toString()이 정의되어 있지 않으면 echo $object;는 Error: Object of class User could not be converted to string으로 스크립트를 멈춥니다. 불리언도 흔히 헷갈립니다. echo true;는 1을 출력하고 echo false;는 아무것도 출력하지 않습니다. 정확한 타입과 값을 봐야 할 때는 var_dump($value)를 쓰세요.
흔한 실수: 괄호와 쉼표를 함께 쓴 echo
echo가 함수처럼 보이기 때문에 echo("a", "b");라고 쓰기 쉽습니다. 괄호는 표현식 하나만 감싸므로 이것은 구문 오류입니다.
PHP Parse error: syntax error, unexpected token "," in /home/index.php on line 2
괄호를 빼거나(echo "a", "b";) 값을 연결하세요(echo("a" . "b");). print도 마찬가지이며, 괄호가 있든 없든 두 번째 값을 받지 않습니다.
자주 묻는 질문
PHP에서 echo와 print의 차이는 무엇인가요?
둘 다 문자열을 출력합니다. echo는 쉼표로 구분한 여러 값을 받고(echo $a, $b;) 아무것도 반환하지 않습니다. print는 값을 정확히 하나만 받고 1을 반환하므로 표현식 안에서 쓸 수 있습니다. 실제로는 거의 어디서나 echo를 씁니다.
echo에 괄호가 필요한가요?
아니요. echo는 함수가 아니라 언어 구문이므로 echo "Hi";가 보통 형태입니다. echo("Hi");는 괄호가 표현식 하나를 묶을 뿐이라 동작하지만, echo("a", "b");는 구문 오류입니다.
echo false는 왜 아무것도 출력하지 않나요?
echo는 값을 문자열로 변환하는데, false는 빈 문자열 ""이 되고 true는 "1"이 됩니다. 불리언 자체를 보려면 var_dump($x);(bool(false) 출력)나 echo var_export($x, true);(false 출력)를 쓰세요.
PHP에서 <?=는 무슨 뜻인가요?
<?= $value ?>는 짧은 echo 태그로, <?php echo $value; ?>와 같습니다. PHP 5.4부터 항상 활성화되어 있으며, HTML 템플릿 안에서 값을 출력하는 일반적인 방법입니다.