psx / v8
php-v8 扩展的辅助库
v0.3.1
2019-01-01 13:00 UTC
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: ^6.0
- phpv8/php-v8-stubs: ^0.2.2
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');