closure_058.phpt 1000 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. ?>
  31. --EXPECT--
  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. string(1) "A"
  44. object(A)#2 (0) {
  45. }
  46. string(1) "A"
  47. string(1) "A"
  48. object(A)#2 (0) {
  49. }
  50. string(1) "A"
  51. string(1) "A"
  52. object(A)#2 (0) {
  53. }
  54. string(1) "A"
  55. string(1) "A"
  56. object(A)#2 (0) {
  57. }
  58. string(1) "A"
  59. string(1) "A"
  60. object(A)#2 (0) {
  61. }