From: Marcus Boerger Date: Sun, 19 Feb 2006 11:55:11 +0000 (+0000) Subject: - Interfaces may have static methods to enforce their existance in X-Git-Tag: RELEASE_1_2~168 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ffd43034b009dc53bb0d5b29a0ec3fa8c26d3606;p=php - Interfaces may have static methods to enforce their existance in implementing classes --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 2225079fb2..77c5937799 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2081,7 +2081,7 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, zend_function_entr scope->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; } } - if (ptr->flags & ZEND_ACC_STATIC) { + if (ptr->flags & ZEND_ACC_STATIC && (!scope || (scope->ce_flags & ZEND_ACC_INTERFACE))) { zend_error(error_type, "Static function %s%s%s() cannot be abstract", scope ? scope->name : "", scope ? "::" : "", ptr->fname); } } else { diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 774455251f..898bb9f756 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1108,7 +1108,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n } else { fn_flags = 0; } - if ((fn_flags & ZEND_ACC_STATIC) && (fn_flags & ZEND_ACC_ABSTRACT)) { + if ((fn_flags & ZEND_ACC_STATIC) && (fn_flags & ZEND_ACC_ABSTRACT) && !(CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE)) { zend_error(E_COMPILE_ERROR, "Static function %v%s%R() cannot be abstract", is_method ? CG(active_class_entry)->name : "", is_method ? "::" : "", Z_TYPE(function_name->u.constant), Z_UNIVAL(function_name->u.constant)); } diff --git a/tests/classes/abstract_static.phpt b/tests/classes/abstract_static.phpt index 2e46e9dc06..01f358638b 100644 --- a/tests/classes/abstract_static.phpt +++ b/tests/classes/abstract_static.phpt @@ -1,21 +1,29 @@ --TEST-- -ZE2 A static abstrcat method may not be called ---SKIPIF-- - +ZE2 A static abstrcat methods --FILE--