005.phpt 975 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. --TEST--
  2. Arrow function $this binding
  3. --FILE--
  4. <?php
  5. class Test {
  6. public function method() {
  7. // It would be okay if this is NULL, but the rest should work
  8. $fn = fn() => 42;
  9. $r = new ReflectionFunction($fn);
  10. var_dump($r->getClosureThis());
  11. $fn = fn() => $this;
  12. var_dump($fn());
  13. $fn = fn() => Test::method2();
  14. $fn();
  15. $fn = fn() => call_user_func('Test::method2');
  16. $fn();
  17. $thisName = "this";
  18. $fn = fn() => $$thisName;
  19. var_dump($fn());
  20. $fn = fn() => self::class;
  21. var_dump($fn());
  22. // static can be used to unbind $this
  23. $fn = static fn() => isset($this);
  24. var_dump($fn());
  25. }
  26. public function method2() {
  27. var_dump($this);
  28. }
  29. }
  30. (new Test)->method();
  31. ?>
  32. --EXPECT--
  33. object(Test)#1 (0) {
  34. }
  35. object(Test)#1 (0) {
  36. }
  37. object(Test)#1 (0) {
  38. }
  39. object(Test)#1 (0) {
  40. }
  41. object(Test)#1 (0) {
  42. }
  43. string(4) "Test"
  44. bool(false)