Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPV8JS中有哪些扩展?_Php_Javascript_V8_Pecl - Fatal编程技术网

PHPV8JS中有哪些扩展?

PHPV8JS中有哪些扩展?,php,javascript,v8,pecl,Php,Javascript,V8,Pecl,我已经开始在php中使用v8js有一段时间了,但是文档非常少 有一件事没有解释,那就是扩展 有可能,但没有详细解释这些行为,或者它们的目的或好处是什么 有人能提供一个很好的描述或链接到解释扩展的文档吗 感谢大家花时间阅读并回答:-)原始答案 我最初的回答表明每次调用executeString时都会调用扩展 正确答案 扩展是在给定V8Js实例的第一次executeString调用之前执行的一段代码。 扩展可以是所有V8Js实例的全局扩展,也可以是特定实例的本地扩展 我通过实验确定,这并不总是非常可

我已经开始在php中使用v8js有一段时间了,但是文档非常少

有一件事没有解释,那就是扩展

有可能,但没有详细解释这些行为,或者它们的目的或好处是什么

有人能提供一个很好的描述或链接到解释扩展的文档吗


感谢大家花时间阅读并回答:-)

原始答案

我最初的回答表明每次调用
executeString
时都会调用扩展

正确答案

扩展是在给定V8Js实例的第一次
executeString
调用之前执行的一段代码。 扩展可以是所有V8Js实例的全局扩展,也可以是特定实例的本地扩展

我通过实验确定,这并不总是非常可靠的。如果您疯狂地刷新页面,您可能不会总是看到扩展运行。。。这可能就是为什么这是测试版质量的软件

这里有两个我突然想到的例子

全局扩展示例 代码

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
V8Js::registerExtension('say_hi', 'print("hey from non global extension! "); var said_hi=true;');
$v8 = new V8Js('PHP', array(), array('say_hi'));
$v8->executeString('print("hello from regular code!");', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
输出

嘿,分机!您好,来自常规代码!分机已经打招呼了

非全球示例 代码

V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
V8Js::registerExtension('say_hi', 'print("hey from non global extension! "); var said_hi=true;');
$v8 = new V8Js('PHP', array(), array('say_hi'));
$v8->executeString('print("hello from regular code!");', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
输出

嘿,来自非全局扩展!您好,来自常规代码!分机已经打招呼了


谢谢你的回答!我试过这些例子。在全局示例中,它只执行一次,executeString上的所有后续调用都不会再次执行扩展代码。谢谢,您是正确的。我更新了我的答案以反映这一点:)