object_passback.phpt 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. --TEST--
  2. Test V8::executeString() : Object passing PHP > JS > PHP
  3. --SKIPIF--
  4. <?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
  5. --FILE--
  6. <?php
  7. class Bar {
  8. function sayHello() {
  9. echo "Hello\n";
  10. }
  11. }
  12. class Foo {
  13. function getBar() {
  14. return new Bar();
  15. }
  16. function callMulti($list) {
  17. foreach($list as $x) {
  18. echo get_class($x)."\n"; // V8Object vs. Bar
  19. $x->sayHello();
  20. }
  21. }
  22. function callSingle($inst) {
  23. echo get_class($inst)."\n";
  24. $inst->sayHello();
  25. }
  26. }
  27. $v8 = new V8Js();
  28. $v8->foo = new Foo();
  29. $JS = <<< EOF
  30. var obj = PHP.foo.getBar();
  31. PHP.foo.callMulti([obj]);
  32. PHP.foo.callMulti([obj]);
  33. PHP.foo.callSingle(obj);
  34. PHP.foo.callSingle(obj);
  35. obj = {};
  36. obj.sayHello = function() {
  37. print("JavaScript Hello\\n");
  38. };
  39. PHP.foo.callMulti([obj]);
  40. PHP.foo.callMulti([obj]);
  41. PHP.foo.callSingle(obj);
  42. PHP.foo.callSingle(obj);
  43. EOF;
  44. $v8->executeString($JS);
  45. ?>
  46. ===EOF===
  47. --EXPECT--
  48. Bar
  49. Hello
  50. Bar
  51. Hello
  52. Bar
  53. Hello
  54. Bar
  55. Hello
  56. V8Object
  57. JavaScript Hello
  58. V8Object
  59. JavaScript Hello
  60. V8Object
  61. JavaScript Hello
  62. V8Object
  63. JavaScript Hello
  64. ===EOF===