Re: about final methods and attributes

From: Date: Sat, 21 Jun 2003 19:08:03 +0000
Subject: Re: about final methods and attributes
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-2504@lists.php.net to get a copy of this message
Hello Cristiano, Saturday, June 21, 2003, 2:07:09 AM, you wrote: MB> Hello Cristiano, MB> Friday, June 20, 2003, 9:03:33 PM, you wrote: CD>> Ok, final methods and attributes are cool, but what about final classes ? CD>> Is it hard to implement ? Or all classes must be able to be extended by CD>> children ? MB> It would be easy to implement and i made a running patch some time back. But MB> we were uncertain about the result, whether or not it is really helpfull and MB> needed in a loose typed language as PHP. But if you come up with a very good MB> scenario were final classes are really needed chances are good they make it MB> into PHP 5, if not chances are not so good. Attached is a patch that allows final classes. -- Best regards, Marcus mailto:helly@php.net

? Zend/teststest.txt Index: Zend/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.428 diff -u -p -r1.428 zend_compile.c --- Zend/zend_compile.c 15 Jun 2003 13:58:50 -0000 1.428 +++ Zend/zend_compile.c 21 Jun 2003 19:02:17 -0000 @@ -1834,6 +1834,9 @@ void zend_do_inheritance(zend_class_entr && !(parent_ce->ce_flags & ZEND_ACC_INTERFACE)) { zend_error(E_ERROR, "Interface %s may not inherit from class (%s)", ce->name, parent_ce->name); } + if (parent_ce->ce_flags & ZEND_ACC_FINAL_CLASS) { + zend_error(E_ERROR, "Class %s may not inherit from final class (%s)", ce->name, parent_ce->name); + } ce->parent = parent_ce; /* Inherit interfaces */ Index: Zend/zend_compile.h =================================================================== RCS file: /repository/ZendEngine2/zend_compile.h,v retrieving revision 1.243 diff -u -p -r1.243 zend_compile.h --- Zend/zend_compile.h 10 Jun 2003 20:03:24 -0000 1.243 +++ Zend/zend_compile.h 21 Jun 2003 19:02:17 -0000 @@ -99,6 +99,7 @@ typedef struct _zend_brk_cont_element { #define ZEND_ACC_FINAL 0x04 #define ZEND_ACC_INTERFACE 0x08 #define ZEND_ACC_ABSTRACT_CLASS 0x10 +#define ZEND_ACC_FINAL_CLASS 0x20 /* The order of those must be kept - public < protected < private */ #define ZEND_ACC_PUBLIC 0x100 Index: Zend/zend_language_parser.y =================================================================== RCS file: /repository/ZendEngine2/zend_language_parser.y,v retrieving revision 1.119 diff -u -p -r1.119 zend_language_parser.y --- Zend/zend_language_parser.y 15 Jun 2003 13:58:50 -0000 1.119 +++ Zend/zend_language_parser.y 21 Jun 2003 19:02:18 -0000 @@ -277,6 +277,7 @@ unticked_class_declaration_statement: class_entry_type: T_CLASS { $$.u.constant.value.lval = 0; } | T_ABSTRACT T_CLASS { $$.u.constant.value.lval = ZEND_ACC_ABSTRACT_CLASS; } + | T_FINAL T_CLASS { $$.u.constant.value.lval = ZEND_ACC_FINAL_CLASS; } | T_INTERFACE { $$.u.constant.value.lval = ZEND_ACC_INTERFACE; } ;
« previous php.internals (#2504) next »