closure_020.phpt 809 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. --TEST--
  2. Closure 020: Trying to access private property outside class
  3. --FILE--
  4. <?php
  5. class foo {
  6. private $test = 3;
  7. public function x() {
  8. $a = &$this;
  9. $this->a = function() use (&$a) { return $a; };
  10. var_dump($this->a->__invoke());
  11. var_dump(is_a($this->a, 'closure'));
  12. var_dump(is_callable($this->a));
  13. return $this->a;
  14. }
  15. }
  16. $foo = new foo;
  17. $y = $foo->x();
  18. var_dump($y()->test);
  19. ?>
  20. --EXPECTF--
  21. object(foo)#%d (2) {
  22. ["test":"foo":private]=>
  23. int(3)
  24. ["a"]=>
  25. object(Closure)#%d (2) {
  26. ["static"]=>
  27. array(1) {
  28. ["a"]=>
  29. *RECURSION*
  30. }
  31. ["this"]=>
  32. *RECURSION*
  33. }
  34. }
  35. bool(true)
  36. bool(true)
  37. Fatal error: Uncaught Error: Cannot access private property foo::$test in %s:%d
  38. Stack trace:
  39. #0 {main}
  40. thrown in %s on line %d