--TEST-- Test V8::executeString() : var_dump --SKIPIF-- = 70300) die('skip Only for php version < 7.3'); ?> --INI-- date.timezone=UTC --FILE-- obj = new Foo; $phptypes = $v8->phptypes = array( "null" => NULL, "bool" => true, "string" => "string", "uint" => 1, "int" => -1, "number" => 3.141592654, "date" => new DateTime('September 27, 1976 09:00:00 UTC', new DateTimeZone('UTC')), //"regexp" => new Regexp('/regexp/'), /* no native PHP regex type */ "array" => array(1,2,3), "object" => array( "field" => "foo" ), "function" => (function ($x) { return $x; }), "phpobject" => new Foo ); echo "---- PHP var_dump of PHP object ----\n"; var_dump($phptypes); try { var_dump($v8->executeString($JS, 'var_dump.js')); } catch (V8JsScriptException $e) { echo "Error!\n"; var_dump($e); } ?> ===EOF=== --EXPECTF-- ---- PHP var_dump of PHP object ---- array(11) { ["null"]=> NULL ["bool"]=> bool(true) ["string"]=> string(6) "string" ["uint"]=> int(1) ["int"]=> int(-1) ["number"]=> float(3.141592654) ["date"]=> object(DateTime)#%d (3) { ["date"]=> string(%d) "1976-09-27 09:00:00%r(\.0+)?%r" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ["array"]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } ["object"]=> array(1) { ["field"]=> string(3) "foo" } ["function"]=> object(Closure)#%d (1) { ["parameter"]=> array(1) { ["$x"]=> string(10) "" } } ["phpobject"]=> object(Foo)#%d (1) { ["field"]=> string(3) "php" } } --- JS var_dump of PHP object ---- array (11) { ["null"] => NULL ["bool"] => bool(true) ["string"] => string(6) "string" ["uint"] => int(1) ["int"] => int(-1) ["number"] => float(3.141593) ["date"] => object(DateTime)#%d (18) { ["createFromFormat"] => object(Closure)#%d { function () { [native code] } } ["getLastErrors"] => object(Closure)#%d { function () { [native code] } } ["format"] => object(Closure)#%d { function () { [native code] } } ["modify"] => object(Closure)#%d { function () { [native code] } } ["add"] => object(Closure)#%d { function () { [native code] } } ["sub"] => object(Closure)#%d { function () { [native code] } } ["getTimezone"] => object(Closure)#%d { function () { [native code] } } ["setTimezone"] => object(Closure)#%d { function () { [native code] } } ["getOffset"] => object(Closure)#%d { function () { [native code] } } ["setTime"] => object(Closure)#%d { function () { [native code] } } ["setDate"] => object(Closure)#%d { function () { [native code] } } ["setISODate"] => object(Closure)#%d { function () { [native code] } } ["setTimestamp"] => object(Closure)#%d { function () { [native code] } } ["getTimestamp"] => object(Closure)#%d { function () { [native code] } } ["diff"] => object(Closure)#%d { function () { [native code] } } ["$date"] => string(%d) "1976-09-27 09:00:00%r(\.0+)?%r" ["$timezone_type"] => int(3) ["$timezone"] => string(3) "UTC" } ["array"] => array(3) { [0] => int(1) [1] => int(2) [2] => int(3) } ["object"] => array (1) { ["field"] => string(3) "foo" } ["function"] => object(Closure)#%d (0) { } ["phpobject"] => object(Foo)#%d (1) { ["$field"] => string(3) "php" } } --- JS var_dump of JS object ---- object(Object)#%d (12) { ["undefined"] => NULL ["null"] => NULL ["bool"] => bool(true) ["string"] => string(6) "string" ["uint"] => int(1) ["int"] => int(-1) ["number"] => float(3.141593) ["regexp"] => regexp(/regexp/) ["array"] => array(3) { [0] => int(1) [1] => int(2) [2] => int(3) } ["object"] => object(Object)#%d (1) { ["field"] => string(3) "foo" } ["function"] => object(Closure)#%d { function id(x) { return x; } } ["phpobject"] => object(Foo)#%d (1) { ["$field"] => string(3) "php" } } --- PHP var_dump of JS object ---- object(V8Object)#%d (12) { ["undefined"]=> NULL ["null"]=> NULL ["bool"]=> bool(true) ["string"]=> string(6) "string" ["uint"]=> int(1) ["int"]=> int(-1) ["number"]=> float(3.141592654) ["regexp"]=> object(V8Object)#%d (0) { } ["array"]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } ["object"]=> object(V8Object)#%d (1) { ["field"]=> string(3) "foo" } ["function"]=> object(V8Function)#%d (0) { } ["phpobject"]=> object(Foo)#%d (1) { ["field"]=> string(3) "php" } } ===EOF===