Zend/zend_object_handlers.c


@@ -1019,6 +1020,8 @@ ZEND_API zval *zend_std_read_dimension(zend_object *object, zval *offset, int ty
                        return NULL;
                }
                return rv;
+       } else if (zend_class_implements_interface(ce, zend_ce_collection)) {
+               return zend_collection_read_item(object, offset);
        } else {
                zend_bad_array_access(ce);
                return NULL;

Zend/zend_collection.h


 void zend_collection_add_item(zend_object *object, zval *offset, zval *value);
+zval *zend_collection_read_item(zend_object *object, zval *offset);