closure_bug66622.phpt 793 B

123456789101112131415161718192021222324252627282930313233343536
  1. --TEST--
  2. Bug 66622: Closures do not correctly capture the late bound class (static::) in some cases
  3. --FILE--
  4. <?php
  5. class A {
  6. static function name() { return 'A'; }
  7. function foo() {
  8. $fn = function() { return static::name(); };
  9. echo static::name() . ' vs ' . $fn() . "\n";
  10. }
  11. function bar() {
  12. $fn = static function() { return static::name(); };
  13. echo static::name() . ' vs ' . $fn() . "\n";
  14. }
  15. static function baz() {
  16. $fn = function() { return static::name(); };
  17. echo static::name() . ' vs ' . $fn() . "\n";
  18. }
  19. }
  20. class B extends A {
  21. static function name() { return 'B'; }
  22. }
  23. function test() {
  24. (new B)->foo();
  25. (new B)->bar();
  26. (new B)->baz();
  27. B::baz();
  28. }
  29. test();
  30. ?>
  31. --EXPECT--
  32. B vs B
  33. B vs B
  34. B vs B
  35. B vs B