mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Revert "Inheritance checks should not ignore parents if these implement an interface"
This reverts commit b67eb3440b
.
This commit is contained in:
parent
648238da5c
commit
46de334452
2
NEWS
2
NEWS
@ -15,8 +15,6 @@ PHP NEWS
|
|||||||
. Fixed bug #73969 (segfault in debug_print_backtrace). (andrewnester)
|
. Fixed bug #73969 (segfault in debug_print_backtrace). (andrewnester)
|
||||||
. Fixed bug #73994 (arginfo incorrect for unpack). (krakjoe)
|
. Fixed bug #73994 (arginfo incorrect for unpack). (krakjoe)
|
||||||
. Fixed bug #73973 (assertion error in debug_zval_dump). (andrewnester)
|
. Fixed bug #73973 (assertion error in debug_zval_dump). (andrewnester)
|
||||||
. Fixed bug #73987 (Method compatibility check looks to original
|
|
||||||
definition and not parent). (pmmaga)
|
|
||||||
|
|
||||||
- DOM:
|
- DOM:
|
||||||
. Fixed bug #54382 (getAttributeNodeNS doesn't get xmlns* attributes).
|
. Fixed bug #54382 (getAttributeNodeNS doesn't get xmlns* attributes).
|
||||||
|
@ -23,4 +23,4 @@ class B extends A {
|
|||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
Fatal error: Declaration of B::foo($var) must be compatible with A::foo() in %sbug62358.php on line 17
|
Fatal error: Declaration of B::foo($var) must be compatible with I::foo() in %sbug62358.php on line 17
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
--TEST--
|
|
||||||
Bug #73987 (Method compatibility check looks to original definition and not parent)
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
interface I {
|
|
||||||
public function example($a, $b, $c);
|
|
||||||
}
|
|
||||||
class A implements I {
|
|
||||||
public function example($a, $b = null, $c = null) { } // compatible with I::example
|
|
||||||
}
|
|
||||||
class B extends A {
|
|
||||||
public function example($a, $b, $c = null) { } // compatible with I::example
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
Fatal error: Declaration of B::example($a, $b, $c = NULL) must be compatible with A::example($a, $b = NULL, $c = NULL) in %s
|
|
@ -1,18 +0,0 @@
|
|||||||
--TEST--
|
|
||||||
Bug #73987 (Method compatibility check looks to original definition and not parent)
|
|
||||||
--FILE--
|
|
||||||
<?php
|
|
||||||
|
|
||||||
interface I {
|
|
||||||
public function example();
|
|
||||||
}
|
|
||||||
class A implements I {
|
|
||||||
public function example(): int { } // compatible with I::example
|
|
||||||
}
|
|
||||||
class B extends A {
|
|
||||||
public function example(): string { } // compatible with I::example
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
--EXPECTF--
|
|
||||||
Fatal error: Declaration of B::example(): string must be compatible with A::example(): int in %s
|
|
@ -607,12 +607,13 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
|
|||||||
} else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) {
|
} else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) {
|
||||||
/* ctors only have a prototype if it comes from an interface */
|
/* ctors only have a prototype if it comes from an interface */
|
||||||
child->common.prototype = parent->common.prototype ? parent->common.prototype : parent;
|
child->common.prototype = parent->common.prototype ? parent->common.prototype : parent;
|
||||||
/* and if that is the case, we want to check inheritance against it */
|
|
||||||
if (parent->common.fn_flags & ZEND_ACC_CTOR) {
|
|
||||||
parent = child->common.prototype;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (child->common.prototype && (
|
||||||
|
child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT
|
||||||
|
)) {
|
||||||
|
parent = child->common.prototype;
|
||||||
|
}
|
||||||
if (UNEXPECTED(!zend_do_perform_implementation_check(child, parent))) {
|
if (UNEXPECTED(!zend_do_perform_implementation_check(child, parent))) {
|
||||||
int error_level;
|
int error_level;
|
||||||
const char *error_verb;
|
const char *error_verb;
|
||||||
|
Loading…
Reference in New Issue
Block a user