As far as I'm concerned you can go ahead and commit this.

At 09:34 AM 6/23/2004 -0700, Sara Golemon wrote:
> >For myself, I agree with you.  Using resources as array offsets just
feels
> >wrong, and I'm more than happy to leave that be.  My only concern there
was
> >consistency with $arr[$res] = $val; behavior which *does* pickup the lval
> >and has since ages long past.
> >
> >But since there's no BC need to allow resources in array initialization,
> >then sure, leave it to the scripter to cast it to an int if that's REALLY
> >what they want. (Again "why?" comes to mind).
>
> You are right, which is a sucky inconsistency. Instead of "fixing" array
> initialization, maybe the right thing to do, is to add an E_WARNING to
> $arr[$res] instead? Or at least an E_STRICT.
>
I can get behind that approach.  That only leaves the severity level and
error text to be decided.  Given the behavior gap between these two, I vote
for E_WARNING.  How does this sound:

Index: Zend/zend_execute.c
===================================================================
RCS file: /repository/ZendEngine2/zend_execute.c,v
retrieving revision 1.649
diff -u -r1.649 zend_execute.c
--- Zend/zend_execute.c 18 Jun 2004 18:33:46 -0000 1.649
+++ Zend/zend_execute.c 23 Jun 2004 16:30:51 -0000
@@ -839,8 +839,10 @@
     }
    }
    break;
-  case IS_DOUBLE:
   case IS_RESOURCE:
+   zend_error(E_WARNING, "Resource ID#%d used as offset, casting to integer
(%d)", dim->value.lval, dim->value.lval);
+   /* Fall Through */
+  case IS_DOUBLE:
   case IS_BOOL:
   case IS_LONG: {
     long index;
@@ -3402,6 +3404,7 @@
     zend_hash_update(array_ptr->value.ht, "", sizeof(""), &expr_ptr,
sizeof(zval *), NULL);
     break;
    default:
+    zend_error(E_WARNING, "Illegal offset type");
     zval_ptr_dtor(&expr_ptr);
     /* do nothing */
     break;



> >The $arr[$obj] = $val; style raises E_WARNING, so it makes sense (to me)
to
> >do the same with the $arr = array($obj => $val); syntax.
>
> Yep, I agree. We should issue an E_WARNING in this case similar to
> $arr[$obj]. We should need to copy the illegal offset error msg.
>
See second block of above diff...

-Sara

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to