PHP6ではUnicode対応のためハッシュテーブルのキーなどで引数の型が char ** から zstr * になっており、以前のHASH_FOREACHマクロは使えませんでした。
今回のものはIS_UNICODEが定義されていればUnicode対応のHASH_FOREACHマクロを定義します。
hash_foreach.h (行数が増えたのでダウンロードできるようにしました)
ちなみにUnicode非対応版ではこうだったのが、
char *_kstr; /* snip. */ switch (zend_hash_get_current_key_ex(a, &_kstr, &_klen, &_knum, 0, NULL)) { case HASH_KEY_IS_STRING: ZVAL_STRINGL(k, _kstr, _klen - 1, 0); break; case HASH_KEY_IS_LONG: ZVAL_LONG(k, (long)_knum); break; default: ZVAL_NULL(k); }
Unicode対応版ではこうなりました。
zstr _kstr; /* snip. */ switch (zend_hash_get_current_key_ex(a, &_kstr, &_klen, &_knum, 0, NULL)) { case HASH_KEY_IS_UNICODE: ZVAL_UNICODEL(k, _kstr.u, _klen - 1, 0); break; case HASH_KEY_IS_STRING: ZVAL_STRINGL(k, _kstr.s, _klen - 1, 0); break; case HASH_KEY_IS_LONG: ZVAL_LONG(k, (long)_knum); break; default: ZVAL_NULL(k); }