summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2014-10-09 19:15:07 +0200
committerNikita Popov <nikic@php.net>2014-10-09 20:48:27 +0200
commitdf79b9b27af70afe502979c84a981d36ed9d86a8 (patch)
tree4a642d706985c960bbfeea70f195aeefe8eb4631 /ext/standard
parentc061c8294514fb8eae7b96f77839312244a50048 (diff)
downloadphp-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.h2
-rw-r--r--ext/standard/var.c18
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);