3 changed files with 149 additions and 5 deletions
@ -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 |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue