Annotation of embedaddon/php/Zend/tests/closure_039.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Closure 039: Rebinding closures, change scope, same runtime type
! 3: --FILE--
! 4: <?php
! 5:
! 6: class A {
! 7: private $x;
! 8:
! 9: public function __construct($v) {
! 10: $this->x = $v;
! 11: }
! 12:
! 13: public function getIncrementor() {
! 14: return function() { return ++$this->x; };
! 15: }
! 16: }
! 17: class B extends A {
! 18: private $x;
! 19: public function __construct($v) {
! 20: parent::__construct($v);
! 21: $this->x = $v*2;
! 22: }
! 23: }
! 24:
! 25: $a = new B(-5);
! 26: $b = new B(10);
! 27:
! 28: $ca = $a->getIncrementor();
! 29: var_dump($ca());
! 30:
! 31: echo "Testing with scope given as object", "\n";
! 32:
! 33: $cb = $ca->bindTo($b, $b);
! 34: $cb2 = Closure::bind($ca, $b, $b);
! 35: var_dump($cb());
! 36: var_dump($cb2());
! 37:
! 38: echo "Testing with scope as string", "\n";
! 39:
! 40: $cb = $ca->bindTo($b, 'B');
! 41: $cb2 = Closure::bind($ca, $b, 'B');
! 42: var_dump($cb());
! 43: var_dump($cb2());
! 44:
! 45: $cb = $ca->bindTo($b, NULL);
! 46: var_dump($cb());
! 47:
! 48: ?>
! 49: --EXPECTF--
! 50: int(-4)
! 51: Testing with scope given as object
! 52: int(21)
! 53: int(22)
! 54: Testing with scope as string
! 55: int(23)
! 56: int(24)
! 57:
! 58: Fatal error: Cannot access private property B::$x in %s on line %d
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>