File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / Zend / tests / bug37632.phpt
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:47:52 2012 UTC (13 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, v5_3_10, HEAD
php

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>