rfc:foreach-non-scalar-keys

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:foreach-non-scalar-keys [2013/03/12 16:47] – link commit nikicrfc:foreach-non-scalar-keys [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 59: Line 59:
 int (*get_current_key)(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC); int (*get_current_key)(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC);
 // Is replaced with this entry: // Is replaced with this entry:
-zval *(*get_current_key)(zend_object_iterator *iter TSRMLS_DC);+void (*get_current_key)(zend_object_iterator *iter, zval *key TSRMLS_DC);
 </code> </code>
  
-The handler will return a ''zval*'' with already increased refcount. The ''zval*'' may not be ''NULL'', unless an exception was thrown. +The handler has to write into the passed ''zval*'' using one of the ''ZVAL_*'' macros.
- +
-The signature can use ''zval*'' instead of ''zval**'' because by-ref modification of keys is not possible. The refcount is increased in the handler (instead of the VM) as that turned out to be the more convenient method for this use case.+
  
 ===== iterator_to_array() ===== ===== iterator_to_array() =====
Line 90: Line 88:
 ===== Patch ===== ===== Patch =====
  
-A preliminary patch implementing the above proposal can be found here: https://github.com/php/php-src/pull/278+The patch for this change can be found here: https://github.com/php/php-src/commit/fcc6611de9054327441786e52444b5f8eecdd525
  
 The change itself is rather small, but there are quite a few extensions that require minor adjustments to use the new API. The change itself is rather small, but there are quite a few extensions that require minor adjustments to use the new API.
rfc/foreach-non-scalar-keys.1363106839.txt.gz · Last modified: 2017/09/22 13:28 (external edit)