ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent) { switch(expr->type) { case IS_ARRAY: ZEND_PUTS_EX("Array\n"); if (++expr->value.ht->nApplyCount>1) { ZEND_PUTS_EX(" *RECURSION*"); expr->value.ht->nApplyCount--; return; } print_hash(write_func, expr->value.ht, indent); expr->value.ht->nApplyCount--; break; case IS_OBJECT: { zend_object *object = Z_OBJ_P(expr); if (++object->properties->nApplyCount>1) { ZEND_PUTS_EX(" *RECURSION*"); object->properties->nApplyCount--; return; } zend_printf("%s Object\n", object->ce->name); print_hash(write_func, object->properties, indent); object->properties->nApplyCount--; break; } default: zend_print_zval_ex(write_func, expr, indent); break; } }
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent) /* {{{ */ { ZVAL_DEREF(expr); switch (Z_TYPE_P(expr)) { case IS_ARRAY: ZEND_PUTS_EX("Array\n"); if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(expr)) && ++Z_ARRVAL_P(expr)->u.v.nApplyCount>1) { ZEND_PUTS_EX(" *RECURSION*"); Z_ARRVAL_P(expr)->u.v.nApplyCount--; return; } print_hash(write_func, Z_ARRVAL_P(expr), indent, 0); if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(expr))) { Z_ARRVAL_P(expr)->u.v.nApplyCount--; } break; case IS_OBJECT: { HashTable *properties; int is_temp; zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr)); ZEND_PUTS_EX(ZSTR_VAL(class_name)); zend_string_release(class_name); ZEND_PUTS_EX(" Object\n"); if (Z_OBJ_APPLY_COUNT_P(expr) > 0) { ZEND_PUTS_EX(" *RECURSION*"); return; } if ((properties = Z_OBJDEBUG_P(expr, is_temp)) == NULL) { break; } Z_OBJ_INC_APPLY_COUNT_P(expr); print_hash(write_func, properties, indent, 1); Z_OBJ_DEC_APPLY_COUNT_P(expr); if (is_temp) { zend_hash_destroy(properties); FREE_HASHTABLE(properties); } break; } default: zend_print_zval_ex(write_func, expr, indent); break; } }
ZEND_API size_t zend_print_zval(zval *expr, int indent) /* {{{ */ { return zend_print_zval_ex(zend_write, expr, indent); }
ZEND_API int zend_print_zval(zval *expr, int indent) { return zend_print_zval_ex(zend_write, expr, indent); }