구글의 자바스크립트 엔진인 V8JS가 PHP Extension으로 있다는 걸 알게 되었다.
버전도 0.X 이고 PECL에 보면 아직 beta 이긴 한데, 왠만한 건 그냥 잘 돌아가는 것 같다.
자바스크립트 실행은 물론이고,
PHP 변수, 함수, 클래스 등도 맵핑이 되는 등 재미있는 extension인 듯.
잘쓰면 서버사이드에서 자바스크립트 TDD도 가능하지 않을까 싶다.
PHP에서 v8js 엔진을 이용한 TDD
그냥 생각나는대로 구색만 갖춰본 코드.
얼마든지 예쁘게 구조화가 가능할 것 같다.
// 원본 js 코드. 실제론 어딘가의 js파일을 읽어들이겠지.
$original_js_code = <<<EOS
function getDouble(val)
{
return val * 2;
}
EOS;
// 테스트용 코드
// getDouble이란 함수에 2를 넣어서 4가 반환되면 true, 아니면 false 출력.
// print() 는 v8js에서 제공하는 API
$test_js = <<<EOS
print(getDouble(2) === 4 ? 'true' : 'false');
EOS;
// 원본 js 코드와 테스트용 js 코드를 합친 후 v8js 엔진에 돌려본다.
// v8js 엔진에서 제공하는 print() API는 STDOUT으로 출력되므로 ob_ 함수를 통해 결과값을 받아온다.
$js_code = $original_js_code;
$js_code .= "\n_____________TEST CODE________________\n";
$js_code .= $test_js;
$v8 = new V8Js();
ob_start();
try {
// 원본 파일명이 functions.js 라고 하자
$js_filename = 'functions.js';
$v8->executeString($js_code, $js_filename);
} catch (V8JSException $e) {
// 예외처리도 됨
}
// $r 에 true가 찍혀 있으면 테스트 통과
$r = ob_get_clean();
Windows 설치법
아래 링크에서 버전 등에 적합한 zip 파일을 다운로드 받는다.
http://windows.php.net/downloads/pecl/snaps/v8js/0.1.3
압축풀면 dll 이 2개 나오는데
php_v8js.dll 은 extension 모여 있는 디렉토리에 넣고 php.ini 에 설정을 추가하고,
v8.dll 은 php.exe가 있는 디렉토리에 넣어주면 됨.
참조
PHP doc
PECL
http://pecl.php.net/package/v8js
github
https://github.com/preillyme/v8js
windows DLL
http://windows.php.net/downloads/pecl/snaps/v8js/0.1.3
'PHP' 카테고리의 다른 글
[PHP] load average throttle (0) | 2014.05.15 |
---|---|
[PHP] PHP 시리얼 통신 (PHP, Serial communication) (0) | 2014.05.15 |
[PHP] json pretty print (0) | 2014.03.18 |
[PHP] MongoDB의 _id로 기간 query 하기 (ObjectId, timestamp, interval, range) (0) | 2014.01.24 |
[PHP] 부동소수점 비교연산 (0) | 2013.11.18 |