Bug #62956: fixing private method signature validation

In inheritance, if both methods are private, don not enforce the same
signature.
This commit is contained in:
Lars Strojny 2012-08-28 14:06:18 +02:00
parent dd9478e6c8
commit 6b1073a3a7
3 changed files with 27 additions and 1 deletions

View File

@ -14,5 +14,6 @@ class B extends A
}
?>
==DONE==
--EXPECTF--
Strict Standards: Declaration of B::test() should be compatible with A::test($a) in %sbug61761.php on line %d
==DONE==

20
Zend/tests/bug62956.phpt Normal file
View File

@ -0,0 +1,20 @@
--TEST--
Bug #62956: "incompatible" signatures for private methods should not cause E_STRICT
--FILE--
<?php
class Base
{
private function test()
{}
}
class Extension extends Base
{
private function test($arg)
{}
}
?>
==DONE==
--EXPECT--
==DONE==

View File

@ -2969,6 +2969,11 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
return 1;
}
/* If both methods are private do not enforce a signature */
if ((fe->common.fn_flags & ZEND_ACC_PRIVATE) && (proto->common.fn_flags & ZEND_ACC_PRIVATE)) {
return 1;
}
/* check number of arguments */
if (proto->common.required_num_args < fe->common.required_num_args
|| proto->common.num_args > fe->common.num_args) {