Что такое расширения в php v8js?

Я начал использовать v8js с php некоторое время, но документация очень тонкая.

Одна вещь, которая не объясняется, - это расширения.

Можно registerExtension, но подробно не объясняется, как они себя ведут или каковы их цели или преимущества.

Может ли кто-нибудь предоставить хорошее описание или ссылку на документацию, в которой объясняются расширения?

Спасибо всем, кто нашел время, чтобы прочитать и ответить: -)

Ответ 1

Оригинальный ответ

В моем первоначальном ответе указано, что расширение вызывалось каждый раз, когда executeString был.

Исправленный ответ

Расширение - это бит кода, который выполняется перед первым вызовом executeString для данного экземпляра V8Js. Расширение может быть глобальным для всех экземпляров 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"); }');

Выход

эй из расширения! привет от обычного кода! расширение уже сказано 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"); }');

Выход

эй из не глобального расширения! привет от обычного кода! расширение уже сказано hi