概述
v8和php-v8
js代码要执行,需要借助javascript引擎将js代码编译成CPU认识的指令集。v8
就是一款javascript引擎,chrome和node底层都使用了V8引擎。php-v8
是一个 PHP 7.x 扩展,它将V8 JavaScript 引擎 API 引入 PHP,提供了可从 PHP 获得的准确的原生 V8 C++ API 实现。
使用场景
php在处理一些网页时,可能需要实现js代码中的某些功能或者函数,但php中没有内置的函数实现时(例如js中的escape和unescape函数,php中并没有相同功能的函数),那么可以使用v8引擎来直接在php中运行js代码。
安装
安装php-v8扩展前,需要先安装v8,由于安装过程比较复杂,这里直接使用提供好的docker版本。
docker run -it phpv8/php-v8 bash -c "php test.php"
如果想执行自己的php文件,可以通过-v参数向docker共享自己的文件:
docker run --rm -v /home/v8:/home -it phpv8/php-v8 bash -c "php /home/unescape.php"
# 将本地的/home/v8文件夹共享到docker虚拟机中的/home文件夹,后面执行的php /home/unescape.php命令等同于执行本地/home/v8/目录下的unescape.php文件
# --rm 的含义是运行后立即删除容器
示例代码
<?php declare(strict_types=1);
use V8\{
Isolate,
Context,
StringValue,
Script,
};
$script_source_string = "function say() { return 'Hello' + ', World!'}; say()";
$isolate = new Isolate();
$context = new Context($isolate);
$source = new StringValue($isolate, $script_source_string);
$script = new Script($context, $source);
$result = $script->run($context);
echo $result->value(), PHP_EOL;
参考文档
https://php-v8.readthedocs.io/en/latest/getting-started/index.html