bug37632.phpt 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. --TEST--
  2. Bug #37632 (Protected method access problem)
  3. --FILE--
  4. <?php
  5. class A1
  6. {
  7. protected function test()
  8. {
  9. echo __METHOD__ . "\n";
  10. }
  11. }
  12. class B1 extends A1
  13. {
  14. public function doTest(A1 $obj)
  15. {
  16. echo __METHOD__ . "\n";
  17. $obj->test();
  18. }
  19. }
  20. class C1 extends A1
  21. {
  22. protected function test()
  23. {
  24. echo __METHOD__ . "\n";
  25. }
  26. }
  27. $b = new B1;
  28. $b->doTest(new C1);
  29. class A2
  30. {
  31. static protected function test()
  32. {
  33. echo __METHOD__ . "\n";
  34. }
  35. }
  36. class B2 extends A2
  37. {
  38. static public function doTest(A2 $obj)
  39. {
  40. echo __METHOD__ . "\n";
  41. $obj->test();
  42. }
  43. }
  44. class C2 extends A2
  45. {
  46. static protected function test()
  47. {
  48. echo __METHOD__ . "\n";
  49. }
  50. }
  51. B2::doTest(new C2);
  52. /* Right now Ctor's cannot be made protected when defined in a ctor. That is
  53. * we cannot decrease visibility.
  54. *
  55. interface Ctor
  56. {
  57. function __construct($x);
  58. }
  59. class A3 implements Ctor
  60. {
  61. protected function __construct()
  62. {
  63. echo __METHOD__ . "\n";
  64. }
  65. }
  66. class B3 extends A3
  67. {
  68. static public function doTest()
  69. {
  70. echo __METHOD__ . "\n";
  71. new C3;
  72. }
  73. }
  74. class C3 extends A3
  75. {
  76. protected function __construct()
  77. {
  78. echo __METHOD__ . "\n";
  79. }
  80. }
  81. B3::doTest();
  82. */
  83. class A4
  84. {
  85. protected function __construct()
  86. {
  87. echo __METHOD__ . "\n";
  88. }
  89. }
  90. class B4 extends A4
  91. {
  92. static public function doTest()
  93. {
  94. echo __METHOD__ . "\n";
  95. new C4;
  96. }
  97. }
  98. class C4 extends A4
  99. {
  100. protected function __construct()
  101. {
  102. echo __METHOD__ . "\n";
  103. }
  104. }
  105. B4::doTest();
  106. ?>
  107. ===DONE===
  108. --EXPECTF--
  109. B1::doTest
  110. C1::test
  111. B2::doTest
  112. C2::test
  113. B4::doTest
  114. Fatal error: Uncaught Error: Call to protected C4::__construct() from scope B4 in %s:%d
  115. Stack trace:
  116. #0 %s(%d): B4::doTest()
  117. #1 {main}
  118. thrown in %sbug37632.php on line %d