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
'Programming > PHP' 카테고리의 다른 글
MSSQL과 연동, 쿼리 날려보기 (PHP with MSSQL) (0) | 2022.02.24 |
---|---|
[Codeigniter 기초] (2) MVC 컨트롤러와 뷰의 관계 (0) | 2022.02.23 |
[Codeigniter 기초] (1) Bootstrap template 적용을 위한 준비단계 (0) | 2022.02.23 |
[Windows - Codeigniter 3] 설치 (0) | 2022.02.21 |
[Codeigniter 3] 컨트롤러의 페이지 생성 원리 기초 (0) | 2022.02.21 |