Hello,
the attched patch fixes this for me, but I'm sure it will impact a lot of
other things. Andi, can you shed some light on it?
Derick
On 25 Mar 2002 [EMAIL PROTECTED] wrote:
> From: [EMAIL PROTECTED]
> Operating system: Linux
> PHP version: 4.1.2
> PHP Bug Type: Scripting Engine problem
> Bug description: Multiply-defined functions in classes not reported
>
> PHP does not report multiply-defined errors for class member functions. For
> example, the following script below, when executed, only outputs "two",
> with no errors.
>
> Instead, PHP should be giving error messages since the function bar has
> been defined multiple times.
>
> <?
> class foo
> {
> function bar() {echo "one\n";}
> function bar() {echo "two\n";}
> }
>
> $f = new foo();
> $f->bar();
> --
> Edit bug report at http://bugs.php.net/?id=16265&edit=1
> --
> Fixed in CVS: http://bugs.php.net/fix.php?id=16265&r=fixedcvs
> Fixed in release: http://bugs.php.net/fix.php?id=16265&r=alreadyfixed
> Need backtrace: http://bugs.php.net/fix.php?id=16265&r=needtrace
> Try newer version: http://bugs.php.net/fix.php?id=16265&r=oldversion
> Not developer issue: http://bugs.php.net/fix.php?id=16265&r=support
> Expected behavior: http://bugs.php.net/fix.php?id=16265&r=notwrong
> Not enough info: http://bugs.php.net/fix.php?id=16265&r=notenoughinfo
> Submitted twice: http://bugs.php.net/fix.php?id=16265&r=submittedtwice
>
Index: Zend/zend_compile.c
===================================================================
RCS file: /repository/Zend/zend_compile.c,v
retrieving revision 1.225
diff -u -r1.225 zend_compile.c
--- Zend/zend_compile.c 14 Feb 2002 03:55:20 -0000 1.225
+++ Zend/zend_compile.c 25 Mar 2002 19:13:17 -0000
@@ -732,7 +732,9 @@
op_array.return_reference = return_reference;
if (is_method) {
- zend_hash_update(&CG(active_class_entry)->function_table, name,
name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
+ if (zend_hash_add(&CG(active_class_entry)->function_table, name,
+name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array)) ==
+FAILURE) {
+ zend_error(E_ERROR, "Cannot redeclare %s()", name);
+ }
} else {
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php