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