[patch] final use only for methods

php.internals

Sterling Hughes

23 years ago
The attached patch modifies zend_language_parser, having it generate a compiler error when final is used on a class property (since we are only allowing it for methods.) -Sterling
-- "First they ignore you, then they laugh at you, then they fight you, then you win." - Gandhi

Timm Friebe

23 years ago
On Sat, 2003-04-19 at 18:17, Sterling Hughes wrote:
> The attached patch modifies zend_language_parser, having it generate a > compiler error when final is used on a class property (since we are only > allowing it for methods.)
You could then also drop: if (parent_info->flags & ZEND_ACC_FINAL) { zend_error(E_COMPILE_ERROR, "Cannot override final property %s::$%s", parent_ce->name, hash_key->arKey); } and if (((current_access_type->u.constant.value.lval | new_modifier->u.constant.value.lval) & (ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL)) == (ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL)) { zend_error(E_COMPILE_ERROR, "Cannot use the final modifier on an abstract class member"); } and if (((current_access_type->u.constant.value.lval | new_modifier->u.constant.value.lval) & (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL)) == (ZEND_ACC_PRIVATE | ZEND_ACC_FINAL)) { zend_error(E_COMPILE_ERROR, "Cannot use the final modifier on a private class member"); } from zend_compile.c - Timm

(Marcus Börger)

23 years ago
At 19:46 19.04.2003, Timm Friebe wrote:
>On Sat, 2003-04-19 at 18:17, Sterling Hughes wrote: > > The attached patch modifies zend_language_parser, having it generate a > > compiler error when final is used on a class property (since we are only > > allowing it for methods.) > >You could then also drop: > >if (parent_info->flags & ZEND_ACC_FINAL) { > zend_error(E_COMPILE_ERROR, "Cannot override final property %s::$%s", >parent_ce->name, hash_key->arKey); >}
Only the above. The other two are needed for method checks. marcus