구글의 자바스크립트 엔진인 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

http://docs.php.net/v8js


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










Posted by bloodguy
,