closure_058.phpt 973 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. --TEST--
  2. Closure 058: Closure scope and object
  3. --FILE--
  4. <?php
  5. class A {
  6. static function foo() {
  7. return function () {var_dump(get_class(),get_called_class());};
  8. }
  9. function bar() {
  10. return function () {var_dump(get_class(),get_called_class(),$this);};
  11. }
  12. }
  13. $z = "call_user_func";
  14. $a = A::foo();
  15. $a();
  16. $a->__invoke();
  17. $c = array($a,"__invoke");
  18. $c();
  19. call_user_func(array($a,"__invoke"));
  20. $z(array($a,"__invoke"));
  21. echo "\n";
  22. $x = new A();
  23. $b = $x->bar();
  24. $b();
  25. $b->__invoke();
  26. $c = array($b,"__invoke");
  27. $c();
  28. call_user_func(array($b,"__invoke"));
  29. $z(array($b,"__invoke"));
  30. --EXPECT--
  31. string(1) "A"
  32. string(1) "A"
  33. string(1) "A"
  34. string(1) "A"
  35. string(1) "A"
  36. string(1) "A"
  37. string(1) "A"
  38. string(1) "A"
  39. string(1) "A"
  40. string(1) "A"
  41. string(1) "A"
  42. string(1) "A"
  43. object(A)#2 (0) {
  44. }
  45. string(1) "A"
  46. string(1) "A"
  47. object(A)#2 (0) {
  48. }
  49. string(1) "A"
  50. string(1) "A"
  51. object(A)#2 (0) {
  52. }
  53. string(1) "A"
  54. string(1) "A"
  55. object(A)#2 (0) {
  56. }
  57. string(1) "A"
  58. string(1) "A"
  59. object(A)#2 (0) {
  60. }