test_callback.php 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. <?php
  2. $a = new V8Js();
  3. // Should not work with closure
  4. $a->test = function ($params) { return (method_exists($params, 'cb1')) ? $params->cb1("hello") : false; };
  5. $ret = $a->executeString('PHP.test(function (foo) { return foo + " world"; });');
  6. var_dump(__LINE__, $ret);
  7. // Test is_a()
  8. $a->test = function ($params) { return (is_a($params, 'V8Object')) ? $params->cb1("hello") : false; };
  9. $ret = $a->executeString('PHP.test({ "cb1" : function (foo) { return foo + " world"; } });');
  10. var_dump(__LINE__, $ret);
  11. // Test is_a()
  12. $a->test = function ($params) { return (is_a($params, 'V8Function')) ? $params("hello") : false; };
  13. $ret = $a->executeString('PHP.test(function (foo) { return foo + " world"; });');
  14. var_dump(__LINE__, $ret);
  15. // Should not work with object
  16. $a->test = function ($params) { return (is_a($params, 'Closure')) ? $params("hello") : false; };
  17. $ret = $a->executeString('PHP.test({ "cb1" : function (foo) { return foo + " world"; } });');
  18. var_dump(__LINE__, $ret);
  19. $a->test = function ($params) { var_dump($params); return $params->cb1("hello"); };
  20. $ret = $a->executeString('PHP.test({ "cb1" : function (foo) { return foo + " world"; } });');
  21. var_dump(__LINE__, $ret);
  22. // FIX! method_exists() Leaks!
  23. $a->test = function ($params) { var_dump($params, method_exists($params, 'cb1'), $params->cb1); };
  24. $ret = $a->executeString('PHP.test({ "cb1" : function (foo) { return foo + " world"; } });');