diff options
author | Nikita Popov <nikic@php.net> | 2014-10-09 19:15:07 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2014-10-09 20:48:27 +0200 |
commit | df79b9b27af70afe502979c84a981d36ed9d86a8 (patch) | |
tree | 4a642d706985c960bbfeea70f195aeefe8eb4631 /ext/standard | |
parent | c061c8294514fb8eae7b96f77839312244a50048 (diff) | |
download | php-git-df79b9b27af70afe502979c84a981d36ed9d86a8.tar.gz |
Update get_class_name semantics
* get_class_name is now only used for displaying the class name
in debugging functions like var_dump, print_r, etc. It is no
longer used in get_class() etc.
* As it is no longer used in get_parent_class() the parent
argument is now gone. This also fixes incorrect parent classes
being reported in COM.
* get_class_name is now always required (previously some places
made it optional and some required it) and is also required
to return a non-NULL value.
* Remove zend_get_object_classname. This also fixes a number of
potential leaks due to incorrect usage of this function.
Diffstat (limited to 'ext/standard')
-rw-r--r-- | ext/standard/php_incomplete_class.h | 2 | ||||
-rw-r--r-- | ext/standard/var.c | 18 |
2 files changed, 7 insertions, 13 deletions
diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h index 7be152f1c0..177e960765 100644 --- a/ext/standard/php_incomplete_class.h +++ b/ext/standard/php_incomplete_class.h @@ -35,7 +35,7 @@ } \ incomplete_class = 1; \ } else { \ - class_name = zend_get_object_classname(Z_OBJ_P(struc) TSRMLS_CC); \ + class_name = zend_string_copy(Z_OBJCE_P(struc)->name); \ } #define PHP_CLEANUP_CLASS_ATTRIBUTES() \ diff --git a/ext/standard/var.c b/ext/standard/var.c index f7ac7065c3..6e5bd703d3 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -163,13 +163,10 @@ again: return; } - if (Z_OBJ_HANDLER_P(struc, get_class_name)) { - class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc), 0 TSRMLS_CC); - php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name->val, Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0); - zend_string_release(class_name); - } else { - php_printf("%sobject(unknown class)#%d (%d) {\n", COMMON, Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0); - } + class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc) TSRMLS_CC); + php_printf("%sobject(%s)#%d (%d) {\n", COMMON, class_name->val, Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0); + zend_string_release(class_name); + if (myht) { zend_ulong num; zend_string *key; @@ -334,7 +331,7 @@ again: myht->u.v.nApplyCount++; } } - class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc), 0 TSRMLS_CC); + class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc) TSRMLS_CC); php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, class_name->val, Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0, Z_REFCOUNT_P(struc)); zend_string_release(class_name); if (myht) { @@ -456,7 +453,6 @@ PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf TSRMLS_DC) HashTable *myht; char *tmp_str; size_t tmp_len; - zend_string *class_name; zend_string *ztmp, *ztmp2; zend_ulong index; zend_string *key; @@ -533,12 +529,10 @@ again: smart_str_appendc(buf, '\n'); buffer_append_spaces(buf, level - 1); } - class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc), 0 TSRMLS_CC); - smart_str_append(buf, class_name); + smart_str_append(buf, Z_OBJCE_P(struc)->name); smart_str_appendl(buf, "::__set_state(array(\n", 21); - zend_string_release(class_name); if (myht) { ZEND_HASH_FOREACH_KEY_VAL_IND(myht, index, key, val) { php_object_element_export(val, index, key, level, buf TSRMLS_CC); |