diff options
Diffstat (limited to 'Zend/tests/bug37632.phpt')
| -rwxr-xr-x | Zend/tests/bug37632.phpt | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Zend/tests/bug37632.phpt b/Zend/tests/bug37632.phpt new file mode 100755 index 000000000..fb72f8934 --- /dev/null +++ b/Zend/tests/bug37632.phpt @@ -0,0 +1,135 @@ +--TEST-- +Bug #37632 (Protected method access problem) +--FILE-- +<?php + +class A1 +{ + protected function test() + { + echo __METHOD__ . "\n"; + } +} + +class B1 extends A1 +{ + public function doTest(A1 $obj) + { + echo __METHOD__ . "\n"; + $obj->test(); + } +} + +class C1 extends A1 +{ + protected function test() + { + echo __METHOD__ . "\n"; + } +} + +$b = new B1; +$b->doTest(new C1); + +class A2 +{ + static protected function test() + { + echo __METHOD__ . "\n"; + } +} + +class B2 extends A2 +{ + static public function doTest(A2 $obj) + { + echo __METHOD__ . "\n"; + $obj->test(); + } +} + +class C2 extends A2 +{ + static protected function test() + { + echo __METHOD__ . "\n"; + } +} + +B2::doTest(new C2); + +/* Right now Ctor's cannot be made protected when defined in a ctor. That is + * we cannot decrease visibility. + * + +interface Ctor +{ + function __construct($x); +} + +class A3 implements Ctor +{ + protected function __construct() + { + echo __METHOD__ . "\n"; + } +} + +class B3 extends A3 +{ + static public function doTest() + { + echo __METHOD__ . "\n"; + new C3; + } +} + +class C3 extends A3 +{ + protected function __construct() + { + echo __METHOD__ . "\n"; + } +} + +B3::doTest(); + +*/ + +class A4 +{ + protected function __construct() + { + echo __METHOD__ . "\n"; + } +} + +class B4 extends A4 +{ + static public function doTest() + { + echo __METHOD__ . "\n"; + new C4; + } +} + +class C4 extends A4 +{ + protected function __construct() + { + echo __METHOD__ . "\n"; + } +} + +B4::doTest(); + +?> +===DONE=== +--EXPECTF-- +B1::doTest +C1::test +B2::doTest +C2::test +B4::doTest + +Fatal error: Call to protected C4::__construct() from context 'B4' in %sbug37632.php on line %d |
