void swoole_set_object(zval *object, void *ptr) { #if PHP_MAJOR_VERSION < 7 TSRMLS_FETCH_FROM_CTX(sw_thread_ctx ? sw_thread_ctx : NULL); zend_object_handle handle = Z_OBJ_HANDLE_P(object); #else int handle = (int) Z_OBJ_HANDLE(*object); #endif assert(handle < SWOOLE_OBJECT_MAX); if (handle >= swoole_objects.size) { uint32_t old_size = swoole_objects.size; uint32_t new_size = swoole_get_new_size(old_size, handle TSRMLS_CC); void *old_ptr = swoole_objects.array; void *new_ptr = NULL; new_ptr = realloc(old_ptr, sizeof(void*) * new_size); if (!new_ptr) { swoole_php_fatal_error(E_ERROR, "malloc(%d) failed.", (int )(new_size * sizeof(void *))); return; } bzero(new_ptr + (old_size * sizeof(void*)), (new_size - old_size) * sizeof(void*)); swoole_objects.array = new_ptr; swoole_objects.size = new_size; } swoole_objects.array[handle] = ptr; }
PHP_METHOD(WinGdiPath, toRegion) { wingdi_devicecontext_object *dc_obj; wingdi_region_object *reg_obj; wingdi_path_object *path_obj; WINGDI_ERROR_HANDLING(); if (zend_parse_parameters_none() == FAILURE) return; WINGDI_RESTORE_ERRORS(); path_obj = zend_object_store_get_object(getThis() TSRMLS_CC); dc_obj = zend_object_store_get_object(path_obj->device_context TSRMLS_CC); // Create a Region object - we can then grab this from the object store // using its handle. object_init_ex(return_value, ce_wingdi_region); reg_obj = zend_object_store_get_object_by_handle(Z_OBJ_HANDLE_P(return_value) TSRMLS_CC); reg_obj->region_handle = PathToRegion(dc_obj->hdc); if (!reg_obj->region_handle) { wingdi_create_error(GetLastError(), ce_wingdi_exception TSRMLS_CC); return; } }
static void init_generated_pool_once(TSRMLS_D) { if (generated_pool_php == NULL) { MAKE_STD_ZVAL(generated_pool_php); Z_TYPE_P(generated_pool_php) = IS_OBJECT; generated_pool = ALLOC(DescriptorPool); descriptor_pool_init_c_instance(generated_pool TSRMLS_CC); Z_OBJ_HANDLE_P(generated_pool_php) = zend_objects_store_put( generated_pool, NULL, (zend_objects_free_object_storage_t)descriptor_pool_free, NULL TSRMLS_CC); Z_OBJ_HT_P(generated_pool_php) = zend_get_std_object_handlers(); } }
void swoole_set_property(zval *object, int property_id, void *ptr) { #if PHP_MAJOR_VERSION < 7 TSRMLS_FETCH_FROM_CTX(sw_thread_ctx ? sw_thread_ctx : NULL); zend_object_handle handle = Z_OBJ_HANDLE_P(object); #else int handle = (int) Z_OBJ_HANDLE(*object); #endif assert(handle < SWOOLE_OBJECT_MAX); if (handle >= swoole_objects.property_size[property_id]) { uint32_t old_size = swoole_objects.property_size[property_id]; uint32_t new_size = 0; void *old_ptr = NULL; void *new_ptr = NULL; if (old_size == 0) { new_size = 65536; new_ptr = calloc(new_size, sizeof(void *)); } else { new_size = swoole_get_new_size(old_size, handle TSRMLS_CC); old_ptr = swoole_objects.property[property_id]; new_ptr = realloc(old_ptr, new_size * sizeof(void *)); } if (new_ptr == NULL) { swoole_php_fatal_error(E_ERROR, "malloc(%d) failed.", (int )(new_size * sizeof(void *))); return; } if (old_size > 0) { bzero(new_ptr + old_size * sizeof(void*), (new_size - old_size) * sizeof(void*)); } swoole_objects.property_size[property_id] = new_size; swoole_objects.property[property_id] = new_ptr; } swoole_objects.property[property_id][handle] = ptr; }
static PHP_FUNCTION(params_dump) { zval *arg;//定义参数值,zval可以表示所有的参数的值 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) { return; } switch(Z_TYPE_P(arg)) { case IS_NULL://arg is null php_printf("NULL\n"); break; case IS_BOOL://arg is true, false php_printf("bool(%s)\n", Z_BVAL_P(arg)?"true":"false"); break; case IS_LONG: php_printf("int(%d)\n", Z_LVAL_P(arg)); break; case IS_DOUBLE: php_printf("float(%f)\n", Z_DVAL_P(arg)); break; case IS_STRING: php_printf("string(%d)\n", Z_STRLEN_P(arg)); PHPWRITE(Z_STRVAL_P(arg), Z_STRLEN_P(arg)); php_printf("\n"); break; case IS_ARRAY: php_printf("array(%d){...}\n", zend_hash_num_elements(Z_ARRVAL_P(arg))); break; case IS_RESOURCE:{ const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RESVAL_P(arg) TSRMLS_CC); php_printf("resource#%ld(%s)\n", Z_RESVAL_P(arg), type_name?type_name:"Unknown"); break; } case IS_OBJECT:{ const zend_class_entry *ce = Z_OBJCE_P(arg); php_printf("object#%u(%s)\n", Z_OBJ_HANDLE_P(arg), (ce && ce->name)?ce->name:"Unknown"); break; } default: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown type: %d\n", Z_TYPE_P(arg)); } }
PHPAPI void php_var_dump(zval *struc, int level) /* {{{ */ { HashTable *myht; zend_string *class_name; int is_temp; int is_ref = 0; zend_ulong num; zend_string *key; zval *val; uint32_t count; if (level > 1) { php_printf("%*c", level - 1, ' '); } again: switch (Z_TYPE_P(struc)) { case IS_FALSE: php_printf("%sbool(false)\n", COMMON); break; case IS_TRUE: php_printf("%sbool(true)\n", COMMON); break; case IS_NULL: php_printf("%sNULL\n", COMMON); break; case IS_LONG: php_printf("%sint(" ZEND_LONG_FMT ")\n", COMMON, Z_LVAL_P(struc)); break; case IS_DOUBLE: php_printf("%sfloat(%.*G)\n", COMMON, (int) EG(precision), Z_DVAL_P(struc)); break; case IS_STRING: php_printf("%sstring(%zd) \"", COMMON, Z_STRLEN_P(struc)); PHPWRITE(Z_STRVAL_P(struc), Z_STRLEN_P(struc)); PUTS("\"\n"); break; case IS_ARRAY: myht = Z_ARRVAL_P(struc); if (level > 1 && ZEND_HASH_APPLY_PROTECTION(myht) && ++myht->u.v.nApplyCount > 1) { PUTS("*RECURSION*\n"); --myht->u.v.nApplyCount; return; } count = zend_array_count(myht); php_printf("%sarray(%d) {\n", COMMON, count); is_temp = 0; ZEND_HASH_FOREACH_KEY_VAL_IND(myht, num, key, val) { php_array_element_dump(val, num, key, level); } ZEND_HASH_FOREACH_END(); if (level > 1 && ZEND_HASH_APPLY_PROTECTION(myht)) { --myht->u.v.nApplyCount; } if (is_temp) { zend_hash_destroy(myht); efree(myht); } if (level > 1) { php_printf("%*c", level-1, ' '); } PUTS("}\n"); break; case IS_OBJECT: if (Z_OBJ_APPLY_COUNT_P(struc) > 0) { PUTS("*RECURSION*\n"); return; } Z_OBJ_INC_APPLY_COUNT_P(struc); myht = Z_OBJDEBUG_P(struc, is_temp); class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc)); php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_array_count(myht) : 0); zend_string_release(class_name); if (myht) { zend_ulong num; zend_string *key; zval *val; ZEND_HASH_FOREACH_KEY_VAL_IND(myht, num, key, val) { php_object_property_dump(val, num, key, level); } ZEND_HASH_FOREACH_END(); if (is_temp) { zend_hash_destroy(myht); efree(myht); } }
#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "amqp_object_store.h" void *amqp_object_store_get_valid_object(const zval *zobject TSRMLS_DC) { zend_object_handle handle; zend_object_store_bucket bucket; handle = Z_OBJ_HANDLE_P(zobject); bucket = EG(objects_store).object_buckets[handle]; return bucket.valid ? bucket.bucket.obj.object : NULL; }
PHPAPI void php_var_dump(zval *struc, int level) /* {{{ */ { HashTable *myht; zend_string *class_name; int is_ref = 0; zend_ulong num; zend_string *key; zval *val; uint32_t count; if (level > 1) { php_printf("%*c", level - 1, ' '); } again: switch (Z_TYPE_P(struc)) { case IS_FALSE: php_printf("%sbool(false)\n", COMMON); break; case IS_TRUE: php_printf("%sbool(true)\n", COMMON); break; case IS_NULL: php_printf("%sNULL\n", COMMON); break; case IS_LONG: php_printf("%sint(" ZEND_LONG_FMT ")\n", COMMON, Z_LVAL_P(struc)); break; case IS_DOUBLE: php_printf("%sfloat(%.*G)\n", COMMON, (int) EG(precision), Z_DVAL_P(struc)); break; case IS_STRING: php_printf("%sstring(%zd) \"", COMMON, Z_STRLEN_P(struc)); PHPWRITE(Z_STRVAL_P(struc), Z_STRLEN_P(struc)); PUTS("\"\n"); break; case IS_ARRAY: myht = Z_ARRVAL_P(struc); if (level > 1 && !(GC_FLAGS(myht) & GC_IMMUTABLE)) { if (GC_IS_RECURSIVE(myht)) { PUTS("*RECURSION*\n"); return; } GC_PROTECT_RECURSION(myht); } count = zend_array_count(myht); php_printf("%sarray(%d) {\n", COMMON, count); ZEND_HASH_FOREACH_KEY_VAL_IND(myht, num, key, val) { php_array_element_dump(val, num, key, level); } ZEND_HASH_FOREACH_END(); if (level > 1 && !(GC_FLAGS(myht) & GC_IMMUTABLE)) { GC_UNPROTECT_RECURSION(myht); } if (level > 1) { php_printf("%*c", level-1, ' '); } PUTS("}\n"); break; case IS_OBJECT: if (Z_IS_RECURSIVE_P(struc)) { PUTS("*RECURSION*\n"); return; } Z_PROTECT_RECURSION_P(struc); myht = zend_get_properties_for(struc, ZEND_PROP_PURPOSE_DEBUG); class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc)); php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_array_count(myht) : 0); zend_string_release_ex(class_name, 0); if (myht) { zend_ulong num; zend_string *key; zval *val; ZEND_HASH_FOREACH_KEY_VAL(myht, num, key, val) { zend_property_info *prop_info = NULL; if (Z_TYPE_P(val) == IS_INDIRECT) { val = Z_INDIRECT_P(val); if (key) { prop_info = zend_get_typed_property_info_for_slot(Z_OBJ_P(struc), val); } } if (!Z_ISUNDEF_P(val) || prop_info) { php_object_property_dump(prop_info, val, num, key, level); } } ZEND_HASH_FOREACH_END(); zend_release_properties(myht); }
#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "phongo_compat.h" #include "php_phongo.h" ZEND_EXTERN_MODULE_GLOBALS(mongodb) static char* php_phongo_make_subscriber_hash(zval* subscriber TSRMLS_DC) { char* hash; int hash_len; hash_len = spprintf(&hash, 0, "SUBS-%09d", Z_OBJ_HANDLE_P(subscriber)); return hash; } /* {{{ proto void MongoDB\Driver\Monitoring\addSubscriber(MongoDB\Driver\Monitoring\Subscriber $subscriber) Adds a monitoring subscriber to the set of subscribers */ PHP_FUNCTION(MongoDB_Driver_Monitoring_addSubscriber) { zval* zSubscriber = NULL; char* hash; #if PHP_VERSION_ID >= 70000 zval* subscriber; #else zval** subscriber; #endif