[PHP] 변수 확인 함수 var_dump, debug_zval_dump, print_r


Study/PHP  2019. 9. 13. 00:07

안녕하세요. 명월입니다.


이 글은 PHP에서의 변수 확인 함수 var_dump, debug_zval_dump, print_r에 대한 글입니다.


프로그램을 개발하면 데이터의 흐름을 알아야 할 때가 있습니다. 그 흐름 포인트를 잡아서 확인하는 작업을 디버깅이라고 합니다.

간단한 웹 페이지를 작성한다면 디버깅이 필요 없이 값의 흐름이 보일 수 있겠지만, 데이터베이스에서 검색을 해서 그 데이터를 여러 가지 형태로 변환한 다음 출력을 한다면 중간에 데이터가 잘 들어오는지, 혹은 예상과 다른 값이 나온다면 중간에서 어떤 부분이 잘못되어있는지 데이터를 확인할 필요가 있습니다.


Java나 C#의 경우는 좋은 개발툴(IDE)가 있어서 BreakPoint로 그 데이터의 추적이 가능합니다만, PHP의 경우는 매끄럽게 디버깅이 되는 좋은 IDE가 없는 것 같습니다.

방금 구글링을 하다보니 최근에는 PHP IDE로 ZendStudio가 있습네요. 아직 사용해 본 적이 없어서 어떤지 잘 모르겠네요.

링크 - https://www.zend.com/en/downloads


지금은 현재는 php IDE툴로서는 좀 손에 익는 eclipse를 사용합니다만, 이게 PHP는 디버깅이 안됩니다.

정확히는 안되는 건 아닙니다만 xdebug를 사용해서 할 수 있습니다만, 저는 에러를 계속 발생시키네요.

참조 링크 - https://xdebug.org/

참조 링크 - https://wiki.eclipse.org/Debugging_using_XDebug

참조 링크 - https://yard.tistory.com/entry/Eclipse-PHP-Debug-

하루 종일 헤매면서 되게 해볼려고 했으나 결국 실패했습니다.

stack-overflow 보니 이클립스 자체에 버그가 있는 것 같네요.. 나중에 ZendStudio으로 도전해 봐야겠습니다.


그렇다고 제가 여태 딱히 PHP를 디버깅해가면서 개발하지는 않았습니다. 한 10년 전 이클립스도 잘 사용하지 않았을 때는 그냥 notepad++로 작성했었습니다.

PHP에는 값을 확인하는 함수가 있는데 그것이 바로 var_dump 함수입니다.

<?php
  $title = "title";
  $data = 1;
  for($i=0;$i<100;$i++){
    $data++;
  }
  // $data 값을 확인합시다.
  var_dump($data);
?>
<!DOCTYPE html>
<html>
<head>
    <title>
    <?=$title?>
    </title>
</head>
<body>
  <?=$data?>
</body>
</html>

일단 글씨가 굉장히 작게 나옵니다만 index.php 파일의 8째줄, int형의 값 101이라고 나오네요. var_dump로 보니 데이터 타입도 나옵니다.

보통은 var_dump를 자주 사용하는데 그와 비슷한 함수가 debug_zval_dump, print_r 가 있습니다.

<?php
  $title = "title";
  $data = 1;
  for($i=0;$i<100;$i++){
    $data++;
  }
  
  $data2 = array("Hello", "world", "Good");
  
  $data3["First"] = "Test";
  $data3["Second"] = "Hello";
  $data3["Third"] = "World";
?>
<!DOCTYPE html>
<html>
<head>
  <title>
  <?=$title?>
  </title>
</head>
<body>
  <?php 
    var_dump($data);
    echo "<br>";
    var_dump($data2);
    echo "<br>";
    var_dump($data3);
    
    echo "<br>";
    echo "<br>";
    echo "<br>";
    
    debug_zval_dump($data);
    echo "<br>";
    debug_zval_dump($data2);
    echo "<br>";
    debug_zval_dump($data3);
    
    echo "<br>";
    echo "<br>";
    echo "<br>";
    
    print_r($data);
    echo "<br>";
    print_r($data2);
    echo "<br>";
    print_r($data3);
  ?>
</body>
</html>

좀 보기 편한 형태는 역시 var_dump이네요. 그러나 debug_zval_dump, print_r의 경우도 간단히 값을 볼 상황이라면 이렇게 사용해도 나쁘지는 않을 것 같습니다.

(※7.X부터는 var_dump 형식이 바뀌었나 보네요.. 예전에는 debug_zval_dump와 형식이 비슷했던 걸로 기억하는데...)


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

링크 - https://www.php.net/manual/en/function.debug-zval-dump.php

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


여기까지 PHP에서의 변수 확인 함수 var_dump, debug_zval_dump, print_r에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.