CakeFest 2024: The Official CakePHP Conference

V8Js::registerExtension

(PECL v8js >= 0.1.0)

V8Js::registerExtensionV8Js で使う JavaScript の拡張を登録する

説明

public static V8Js::registerExtension(
    string $extension_name,
    string $script,
    array $dependencies = array(),
    bool $auto_enable = false
): bool

渡された JavaScript scriptV8Js コンテキストで利用する拡張として登録します。

パラメータ

extension_name

登録する拡張の名前。

script

登録する JavaScript コード。

dependencies

登録する拡張が依存している他の拡張の名前の配列。この拡張が読み込まれたときに、 これらの拡張も自動的に有効になります。

注意:

拡張を使う V8Js を作成する前に、 その拡張自身と依存する拡張群をすべて登録しておかなければなりません。

auto_enable

true にすると、この拡張がすべての V8Js コンテキストで自動的に有効となります。

戻り値

拡張の登録に成功した場合に true、それ以外の場合に false を返します。

add a note

User Contributed Notes 2 notes

up
7
dimarikson at yandex dot ru
9 years ago
Usage sample:

if (V8Js::registerExtension('myjs', 'var x = 1 + 1;', array(), true) === false) {
exit("Failed to register js extension script");
}

$v8js = new V8Js;

$jsExec = <<<EOD
x;
EOD;

echo $v8js->executeString($jsExec)."\n"; // print "2"
up
4
Reforced
4 years ago
Note that since version 2.0.0 V8Js::registerExtension is deprecated and suggests use snapshots instead https://github.com/phpv8/v8js/releases/tag/2.0.0
Simple example using snapshots and the moment.js:

<?php
$script
= file_get_contents('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js');

$snapshot = V8Js::createSnapshot($script);
$v8 = new V8Js('php', array(), array(), true, $snapshot);

echo
$v8->executeString('moment().format()');
?>

Side-note: If you value speed, security and stability do not use file_get_contents to grab external javascripts on production servers.
To Top