> >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