gcc 컴파일러는 -S 옵션을 이용해 어셈블리어로 실제 C 언어의 내부 동작을 살펴 볼 수 있다. 하지만 PHP는 기본적으로 그러한 기능이 없으나, pthreads 모듈을 만든 Joe Watkins가 만든 explain이라는 모듈을 통해 어느 정도 PHP 내부 동작을 파악 할 수 있게 됐다.

일단 explain 확장 모듈을 설치해야 한다.

1
2
3
4
5
6
7
wget https://github.com/krakjoe/explain/archive/master.tar.gz -O explain.tar.gz
tar -xvzf explain.tar.gz
cd explain-master
phpize
./configure
make
make install

설치 후 자신의 환경에 맞춰 explain.ini 파일을 만들고 아래 내용을 넣는다.

1
extension=explain.so

만약 phpbrew를 사용한다면 간단히 phpbrew ext enable explain 명령으로 모듈을 활성화 할 수 있다. 다음 명령으로 explain 모듈이 활성화 됐는지 확인한다.

1
php -m | grep explain

explain 모듈 사용법은 explain-master 안에 있는 explain.php를 통해 타겟 php 파일 또는 디렉토리를 지정하면 된다.

적당한 디렉토리를 하나 만들고 예제로 쓸 두 파일을 만든다.

1
2
<?php
echo "Hello world\n";
1
2
<?php
print "Hello world\n";

그리고 아래 명령을 실행한다.

1
php ../explain-master/explain.php . > echo_vs_print.html

실행을 하고 나면 echo_vs_print.html 파일이 생긴다. 브라우징에 필요한 자바스크립트 파일을 복사해온다.

1
cp -r ../explain-master/assets .

웹브라우저로 echo_vs_print.html 파일을 열어보자.

echo

print

두 파일의 내용을 비교해보면 print는 반환값을 가지고 있기 때문에 1개의 명령을 더 실행하는 것을 알 수 있다.

아쉬운 점은 Zend 명령으로 변환된 것을 보여주기 때문에 동적으로 처리되는 경우까지 완벽히 파악하기는 어렵다는 것이다. 하지만 PHP 내부 동작을 이해하는데 큰 도움이 될뿐더러 특히 확장 모듈을 개발하려는 개발자에게는 더욱 유용하리라 예상된다.