summaryrefslogtreecommitdiff
path: root/Zend/tests/bug37632.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/tests/bug37632.phpt')
-rwxr-xr-xZend/tests/bug37632.phpt135
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