Annotation of embedaddon/php/Zend/tests/bug32290.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Bug #32290 (calling call_user_func_array() ends in infinite loop within child class)
! 3: --INI--
! 4: error_reporting=8191
! 5: --FILE--
! 6: <?php
! 7:
! 8: class TestA
! 9: {
! 10: public function doSomething($i)
! 11: {
! 12: echo __METHOD__ . "($i)\n";
! 13: return --$i;
! 14: }
! 15:
! 16: public function doSomethingThis($i)
! 17: {
! 18: echo __METHOD__ . "($i)\n";
! 19: return --$i;
! 20: }
! 21:
! 22: public function doSomethingParent($i)
! 23: {
! 24: echo __METHOD__ . "($i)\n";
! 25: return --$i;
! 26: }
! 27:
! 28: public function doSomethingParentThis($i)
! 29: {
! 30: echo __METHOD__ . "($i)\n";
! 31: return --$i;
! 32: }
! 33:
! 34: public static function doSomethingStatic($i)
! 35: {
! 36: echo __METHOD__ . "($i)\n";
! 37: return --$i;
! 38: }
! 39: }
! 40:
! 41: class TestB extends TestA
! 42: {
! 43: public function doSomething($i)
! 44: {
! 45: echo __METHOD__ . "($i)\n";
! 46: $i++;
! 47: if ($i >= 5) return 5;
! 48: return call_user_func_array(array("TestA", "doSomething"), array($i));
! 49: }
! 50:
! 51: public function doSomethingThis($i)
! 52: {
! 53: echo __METHOD__ . "($i)\n";
! 54: $i++;
! 55: if ($i >= 5) return 5;
! 56: return call_user_func_array(array($this, "TestA::doSomethingThis"), array($i));
! 57: }
! 58:
! 59: public function doSomethingParent($i)
! 60: {
! 61: echo __METHOD__ . "($i)\n";
! 62: $i++;
! 63: if ($i >= 5) return 5;
! 64: return call_user_func_array(array("parent", "doSomethingParent"), array($i));
! 65: }
! 66:
! 67: public function doSomethingParentThis($i)
! 68: {
! 69: echo __METHOD__ . "($i)\n";
! 70: $i++;
! 71: if ($i >= 5) return 5;
! 72: return call_user_func_array(array($this, "parent::doSomethingParentThis"), array($i));
! 73: }
! 74:
! 75: public static function doSomethingStatic($i)
! 76: {
! 77: echo __METHOD__ . "($i)\n";
! 78: $i++;
! 79: if ($i >= 5) return 5;
! 80: return call_user_func_array(array("TestA", "doSomethingStatic"), array($i));
! 81: }
! 82: }
! 83:
! 84: $x = new TestB();
! 85: echo "===A===\n";
! 86: var_dump($x->doSomething(1));
! 87: echo "\n===B===\n";
! 88: var_dump($x->doSomethingThis(1));
! 89: echo "\n===C===\n";
! 90: var_dump($x->doSomethingParent(1));
! 91: echo "\n===D===\n";
! 92: var_dump($x->doSomethingParentThis(1));
! 93: echo "\n===E===\n";
! 94: var_dump($x->doSomethingStatic(1));
! 95:
! 96: ?>
! 97: ===DONE===
! 98: <?php exit(0); ?>
! 99: --EXPECTF--
! 100: ===A===
! 101: TestB::doSomething(1)
! 102: TestA::doSomething(2)
! 103: int(1)
! 104:
! 105: ===B===
! 106: TestB::doSomethingThis(1)
! 107: TestA::doSomethingThis(2)
! 108: int(1)
! 109:
! 110: ===C===
! 111: TestB::doSomethingParent(1)
! 112: TestA::doSomethingParent(2)
! 113: int(1)
! 114:
! 115: ===D===
! 116: TestB::doSomethingParentThis(1)
! 117: TestA::doSomethingParentThis(2)
! 118: int(1)
! 119:
! 120: ===E===
! 121: TestB::doSomethingStatic(1)
! 122: TestA::doSomethingStatic(2)
! 123: int(1)
! 124: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>