php 출력 구문은 대표적으로 echo, print, print_r, var_dump 이 네 가지를 가장 많이 사용합니다.

 각각의 차이가 어떤 점이 있는지, 문자열/숫자/1차원 배열/2차원 배열의 변수를 각각 선언한 뒤 출력을 해보며 확인해보겠습니다.

 왜 제목에 출력 '구문(함수)'로 써놨는지 그 이유도 알아보겠습니다.

 

<?php

// 문자열 type
$test_string = "Hello World";
// 숫자(정수) type
$test_int = 1234;
// 1차원 배열
$test_array = array("0", "HYUNDAI", "iOniq 5");
// 2차원 배열
$test_array2D = array( // 1차원 배열을 3개 갖는 2차원 배열 선언과 동시에 초기화
    array("1", "PEUGEOT", 5008),
    array("2", "CITROEN", "C5"),
    array("3", "DS", "DS3 Crossback")
);

echo "1) echo로 변수 출력<br>";
echo $test_string;
echo "<Br>";
echo $test_int;
echo "<Br>";
echo $test_array;
echo "<Br>";
echo $test_array2D;
echo "<Br>";
echo "<hr>";

echo "2) print로 변수출력 <br>";
print $test_string;
echo "<Br>";
print $test_int;
echo "<Br>";
print $test_array;
echo "<Br>";
print $test_array2D;
echo "<Br>";
echo "<hr>";

echo "3) print_r로 변수출력 <br>";
print_r($test_string);
echo "<Br>";
print_r($test_int);
echo "<Br>";
print_r($test_array);
echo "<Br>";
print_r($test_array2D);
echo "<Br>";
echo "<hr>";

echo "4) print_r로 변수출력 <br>";
var_dump($test_string);
echo "<Br>";
var_dump($test_int);
echo "<Br>";
var_dump($test_array);
echo "<Br>";
var_dump($test_array2D);
echo "<Br>";
?>

바로 출력 결과를 확인해볼까요

결과만 보면 'echo'와 'print' 키워드는 같은 결과를 나타내지만 큰 차이가 있습니다.


1. echo vs print

 간혹 php의 print는 함수고 echo는 함수가 아니다라는 글을 보았는데 정확히는 둘 다 '아니지만 print는 반은 함수다' 라고 생각합니다.

 일반적으로 함수라하면 값을 언제나 반환하지 않더라도 여차하면 '반환할 수 있어'라는 기능을 내포하고 있으니까요.

print는 동작시 언제나 '1'을 반환하고 있습니다.

echo print("");
print print("");
print_r(print(""));
var_dump(print(""));

 위에 처럼 print에 빈 문자를 각각의 출력문으로 출력하면 값이 어떻게 될까요.

var_dump()는 아무 출력값이 안 나오고 나머지는 '1'을 출력하게 됩니다.

 결론적으로 print는 함수는 아니지만 언제나 '1'을 출력하는 성질을 갖고 있으며, 개인적으로 잘 사용하진 않지만 '삼항연산'을 출력 할 때 외에는 print를 쓸 이유가 굳이 있을까 하는 생각이듭니다.

(삼항연산 참고 : https://pjw48.net/wordpress/2017/02/08/helloworld-php/)


* echo나 print는 왜 배열을 출력하지 못 할까요

이 둘의 공통점은 아래와 같습니다.

Non-string values will be coerced to strings, even when the strict_types directive is enabled.

문자열이 아니면 강제로 문자열로 바꿀껀데, 못 바꾸게 생겼으면 데이터 타입을 출력하겠다 정도로 이해하시면 되지 않을까 싶습니다.


2. print_r vs var_dump

 이 둘의 가장 대표적인 차이는 '누가 더 자세히 안내해주냐' 입니다.

다시 결과를 확인해볼까요

3) print_r로 변수출력
Hello World
1234
Array ( [0] => 0 [1] => HYUNDAI [2] => iOniq 5 )
Array ( [0] => Array ( [0] => 1 [1] => PEUGEOT [2] => 5008 ) [1] => Array ( [0] => 2 [1] => CITROEN [2] => C5 ) [2] => Array ( [0] => 3 [1] => DS [2] => DS3 Crossback ) )

4) print_r로 변수출력
D:\Bitnami\apache2\htdocs\playground\php_study\print_function.php:50:string 'Hello World' (length=11)

D:\Bitnami\apache2\htdocs\playground\php_study\print_function.php:52:int 1234

D:\Bitnami\apache2\htdocs\playground\php_study\print_function.php:54:
array (size=3)
  0 => string '0' (length=1)
  1 => string 'HYUNDAI' (length=7)
  2 => string 'iOniq 5' (length=7)

D:\Bitnami\apache2\htdocs\playground\php_study\print_function.php:56:
array (size=3)
  0 => 
    array (size=3)
      0 => string '1' (length=1)
      1 => string 'PEUGEOT' (length=7)
      2 => int 5008
  1 => 
    array (size=3)
      0 => string '2' (length=1)
      1 => string 'CITROEN' (length=7)
      2 => string 'C5' (length=2)
  2 => 
    array (size=3)
      0 => string '3' (length=1)
      1 => string 'DS' (length=2)
      2 => string 'DS3 Crossback' (length=13)

 위에 결과를 보면 var_dump로 출력한 결과가 더 자세하다는 걸 볼 수 있습니다.

데이터 타입부터, 출력된 경로의 위치까지 자세히 출력해주기 때문에 디버깅시 유용하게 사용할 수 있습니다.

 그렇기 때문에 'null'을 var_dump() 출력할 수 있으나 print_r()은 출력할 수 없게 됩니다.

 

또, print_r은 문자열을 반환 하지만 var_dump는 아무 값을 반환하지 않습니다.

아래 print_r과 var_dump의 함수를 비교해보면 한 눈에 알 수 있습니다.

print_r(mixed $value, bool $return = false): string|bool
var_dump(mixed $value, mixed ...$values): void

 

결론적으로 print_r은 단어 그대로 'print'에 기능이 집중되어있습니다.


* 참고

php 공식 문서에 echo와 print문에 대한 설명이 있으니 참고해주세요

https://www.php.net/manual/en/function.echo

https://www.php.net/manual/en/function.print.php

 

PHP: print - Manual

mvpetrovich of 2007 could just use single quotes as his string delimiters (see the example in the current documentation).It's not ALWAYS appropriate, but generally it is best (the Zend Framework coding standards have a good take on this). It yields a numbe

www.php.net

https://www.php.net/manual/en/function.print-r

 

PHP: print_r - Manual

Here's a PHP version of print_r which can be tailored to your needs. Shows protected and private properties of objects and detects recursion (for objects only!). Usage:void u_print_r ( mixed $expression [, array $ignore] )Use the $ignore parameter to provi

www.php.net

https://www.php.net/manual/en/function.var-dump

+ Recent posts