20,397
社区成员




PHP_MINIT_FUNCTION(xy)
{
/* If you have INI entries, uncomment these lines
REGISTER_INI_ENTRIES();
*/
HashTable *ht;
zval val;
zval result;
(box) = (HashTable *)pemalloc(sizeof(HashTable), 64);
if ((box) == NULL) {
zend_error(E_ERROR, "Cannot allocate persistent HashTable ?");
}
zend_hash_init(box, 8, NULL, NULL, 1);
GC_FLAGS(box) |= IS_ARRAY_IMMUTABLE;
(ht) = (HashTable *)pemalloc(sizeof(HashTable), 32);
if ((ht) == NULL) {
zend_error(E_ERROR, "Cannot allocate persistent HashTable ?");
}
zend_hash_init(ht, 4, NULL, NULL, 1);
GC_FLAGS(ht) |= IS_ARRAY_IMMUTABLE;
zend_string *k = xy_str_persistent("ab", 3);
ZVAL_STRING(&val, "1234");
zend_hash_add(ht, k, &val);
ZVAL_ARR(&result, ht);
Z_ADDREF_P(&result);
Z_TYPE_FLAGS_P(&result) = IS_TYPE_IMMUTABLE;
zend_hash_update(box, xy_str_persistent("test", 5), &result);
return SUCCESS;
}
PHP_FUNCTION(my_arr)
{
zend_string *name;
zval *pzval;
HashTable *target = box;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S", &name) == FAILURE) {
return;
}
//zend_string *k = xy_str_persistent("test", 5);
pzval = zend_symtable_find(target, name);
if (pzval)
{
ZVAL_COPY_VALUE(return_value, pzval);
}
RETURN_NULL();
}