diff --git a/Zend/tests/enum/final.phpt b/Zend/tests/enum/final.phpt index ca13b7da8c6..353e1868d2f 100644 --- a/Zend/tests/enum/final.phpt +++ b/Zend/tests/enum/final.phpt @@ -9,4 +9,4 @@ class Bar extends Foo {} ?> --EXPECTF-- -Fatal error: Class Bar may not inherit from final class (Foo) in %s on line %d +Fatal error: Class Bar cannot extend final class Foo in %s on line %d diff --git a/Zend/tests/generators/errors/generator_extend_error.phpt b/Zend/tests/generators/errors/generator_extend_error.phpt index 550f16ae03b..b0d321cf404 100644 --- a/Zend/tests/generators/errors/generator_extend_error.phpt +++ b/Zend/tests/generators/errors/generator_extend_error.phpt @@ -7,4 +7,4 @@ class ExtendedGenerator extends Generator { } ?> --EXPECTF-- -Fatal error: Class ExtendedGenerator may not inherit from final class (Generator) in %s on line %d +Fatal error: Class ExtendedGenerator cannot extend final class Generator in %s on line %d diff --git a/Zend/tests/traits/error_001.phpt b/Zend/tests/traits/error_001.phpt index 31f2ab15c0a..a7889da41e2 100644 --- a/Zend/tests/traits/error_001.phpt +++ b/Zend/tests/traits/error_001.phpt @@ -25,4 +25,4 @@ class A extends foo { ?> --EXPECTF-- -Fatal error: Class A cannot extend from trait foo in %s on line %d +Fatal error: Class A cannot extend trait foo in %s on line %d diff --git a/Zend/tests/traits/error_009.phpt b/Zend/tests/traits/error_009.phpt index a1eb6b41348..1706255535f 100644 --- a/Zend/tests/traits/error_009.phpt +++ b/Zend/tests/traits/error_009.phpt @@ -9,4 +9,4 @@ class foo extends abc { } ?> --EXPECTF-- -Fatal error: Class foo cannot extend from trait abc in %s on line %d +Fatal error: Class foo cannot extend trait abc in %s on line %d diff --git a/Zend/tests/weakrefs/weakrefs_004.phpt b/Zend/tests/weakrefs/weakrefs_004.phpt index 35fb3c5b3a4..74b1718de79 100644 --- a/Zend/tests/weakrefs/weakrefs_004.phpt +++ b/Zend/tests/weakrefs/weakrefs_004.phpt @@ -5,4 +5,4 @@ WeakReference no inheritance class Test extends WeakReference {} ?> --EXPECTF-- -Fatal error: Class Test may not inherit from final class (WeakReference) in %s on line %d +Fatal error: Class Test cannot extend final class WeakReference in %s on line %d diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index c38e97cc1a6..cdd61fefbb7 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -1424,19 +1424,19 @@ ZEND_API void zend_do_inheritance_ex(zend_class_entry *ce, zend_class_entry *par if (UNEXPECTED(ce->ce_flags & ZEND_ACC_INTERFACE)) { /* Interface can only inherit other interfaces */ if (UNEXPECTED(!(parent_ce->ce_flags & ZEND_ACC_INTERFACE))) { - zend_error_noreturn(E_COMPILE_ERROR, "Interface %s may not inherit from class (%s)", ZSTR_VAL(ce->name), ZSTR_VAL(parent_ce->name)); + zend_error_noreturn(E_COMPILE_ERROR, "Interface %s cannot extend class %s", ZSTR_VAL(ce->name), ZSTR_VAL(parent_ce->name)); } } else if (UNEXPECTED(parent_ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT|ZEND_ACC_FINAL))) { - /* Class declaration must not extend traits or interfaces */ - if (parent_ce->ce_flags & ZEND_ACC_INTERFACE) { - zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend from interface %s", ZSTR_VAL(ce->name), ZSTR_VAL(parent_ce->name)); - } else if (parent_ce->ce_flags & ZEND_ACC_TRAIT) { - zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend from trait %s", ZSTR_VAL(ce->name), ZSTR_VAL(parent_ce->name)); - } - /* Class must not extend a final class */ if (parent_ce->ce_flags & ZEND_ACC_FINAL) { - zend_error_noreturn(E_COMPILE_ERROR, "Class %s may not inherit from final class (%s)", ZSTR_VAL(ce->name), ZSTR_VAL(parent_ce->name)); + zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend final class %s", ZSTR_VAL(ce->name), ZSTR_VAL(parent_ce->name)); + } + + /* Class declaration must not extend traits or interfaces */ + if ((parent_ce->ce_flags & ZEND_ACC_INTERFACE) || (parent_ce->ce_flags & ZEND_ACC_TRAIT)) { + zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend %s %s", + ZSTR_VAL(ce->name), parent_ce->ce_flags & ZEND_ACC_INTERFACE ? "interface" : "trait", ZSTR_VAL(parent_ce->name) + ); } } diff --git a/ext/imap/tests/imap_final.phpt b/ext/imap/tests/imap_final.phpt index 693cddab85d..9ead94ffefd 100644 --- a/ext/imap/tests/imap_final.phpt +++ b/ext/imap/tests/imap_final.phpt @@ -7,4 +7,4 @@ imap class T extends IMAP\Connection {} --EXPECTF-- -Fatal error: Class T may not inherit from final class (IMAP\Connection) in %s on line %d +Fatal error: Class T cannot extend final class IMAP\Connection in %s on line %d diff --git a/ext/reflection/tests/ReflectionAttribute_final.phpt b/ext/reflection/tests/ReflectionAttribute_final.phpt index f2899d9724a..c0363a31306 100644 --- a/ext/reflection/tests/ReflectionAttribute_final.phpt +++ b/ext/reflection/tests/ReflectionAttribute_final.phpt @@ -7,4 +7,4 @@ class T extends ReflectionAttribute {} ?> --EXPECTF-- -Fatal error: Class T may not inherit from final class (ReflectionAttribute) in %s on line %d +Fatal error: Class T cannot extend final class ReflectionAttribute in %s on line %d diff --git a/ext/standard/tests/class_object/bug78638.phpt b/ext/standard/tests/class_object/bug78638.phpt index 76315ee1c56..aaadcda836e 100644 --- a/ext/standard/tests/class_object/bug78638.phpt +++ b/ext/standard/tests/class_object/bug78638.phpt @@ -6,4 +6,4 @@ $c = new class('bar') extends __PHP_Incomplete_Class { }; ?> --EXPECTF-- -Fatal error: Class __PHP_Incomplete_Class@anonymous may not inherit from final class (__PHP_Incomplete_Class) in %s on line %d +Fatal error: Class __PHP_Incomplete_Class@anonymous cannot extend final class __PHP_Incomplete_Class in %s on line %d diff --git a/ext/xml/tests/bug78563_final.phpt b/ext/xml/tests/bug78563_final.phpt index c5fdffa8f9b..b2ffef0f8b4 100644 --- a/ext/xml/tests/bug78563_final.phpt +++ b/ext/xml/tests/bug78563_final.phpt @@ -12,4 +12,4 @@ class Dummy extends Xmlparser { ?> ===DONE=== --EXPECTF-- -Fatal error: Class Dummy may not inherit from final class (XMLParser) in %s on line %d +Fatal error: Class Dummy cannot extend final class XMLParser in %s on line %d diff --git a/tests/classes/class_final.phpt b/tests/classes/class_final.phpt index 885b5659524..69fc6df0c07 100644 --- a/tests/classes/class_final.phpt +++ b/tests/classes/class_final.phpt @@ -17,4 +17,4 @@ class derived extends base { echo "Done\n"; // shouldn't be displayed ?> --EXPECTF-- -Fatal error: Class derived may not inherit from final class (base) in %s on line %d +Fatal error: Class derived cannot extend final class base in %s on line %d diff --git a/tests/classes/interface_and_extends.phpt b/tests/classes/interface_and_extends.phpt index 080ba24da91..028461c1183 100644 --- a/tests/classes/interface_and_extends.phpt +++ b/tests/classes/interface_and_extends.phpt @@ -21,4 +21,4 @@ $o->show(); ?> ===DONE=== --EXPECTF-- -Fatal error: Class Tester cannot extend from interface Test in %sinterface_and_extends.php on line %d +Fatal error: Class Tester cannot extend interface Test in %sinterface_and_extends.php on line %d