psx/v8

php-v8 扩展的辅助库

v0.3.1 2019-01-01 13:00 UTC

This package is auto-updated.

Last update: 2024-09-19 00:31:13 UTC


README

关于

这是一个小型辅助库,简化了与 PHP V8 扩展(https://github.com/pinepain/php-v8)的工作。它添加了小的包装类,帮助在 PHP 和 V8 环境之间进行类型转换。

使用方法

<?php

$script = <<<JS

var message = 'Hello ' + console.foo;

resp = {
    message: console.log(message),
    bar: function(data){
        return 'Foo ' + data;
    },
    foo: 'bar'
};

JS;

$environment = new \PSX\V8\Environment();

$environment->set('console', [
    'foo' => 'foo',
    'log' => function($value){
         return $value . ' and bar';
    }
]);

$environment->run($script);

$resp = $environment->get('resp');

echo $resp->get('message') . "\n"; // Hello foo and bar
echo $resp->get('bar')(['test']) . "\n"; // Foo test
echo $resp->get('foo') . "\n"; // bar

对象

也可以将完整的 PHP 类暴露给 V8 引擎。因此,该类必须实现 PSX\V8\ObjectInterface 接口。还有一个 PSX\V8\ReflectionObject 对象,可以自动暴露所有公共属性和方法。上面定义的 JavaScript 也会在以下环境中工作

<?php

class Console
{
    public $foo;
    
    public function __construct()
    {
        $this->foo = 'foo';
    }
    
    public function log($value)
    {
        return $value . ' and bar';
    }
}

$console = new Console();

$environment = new \PSX\V8\Environment();
$environment->set('console', new \PSX\V8\Object\ReflectionObject($console));
$environment->run($script);

$resp = $environment->get('resp');

Build Status