Index: Zend/zend_builtin_functions.c =================================================================== RCS file: /repository/ZendEngine2/zend_builtin_functions.c,v retrieving revision 1.184 diff -u -r1.184 zend_builtin_functions.c --- Zend/zend_builtin_functions.c 8 Apr 2003 18:22:32 -0000 1.184 +++ Zend/zend_builtin_functions.c 14 Apr 2003 16:35:09 -0000 @@ -511,35 +511,42 @@ /* }}} */ -/* {{{ proto string get_class(object object) +/* {{{ proto string get_class(object object [, bool fully_qualified]) Retrieves the class name */ ZEND_FUNCTION(get_class) { - zval **arg; + zval *arg; char *name; + char *fullname; + long fully_qualified = 0; zend_uint name_len; + zend_class_entry *ce; - if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) { - ZEND_WRONG_PARAM_COUNT(); - } - if (Z_TYPE_PP(arg) != IS_OBJECT) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|b", &arg, &fully_qualified) == FAILURE) { RETURN_FALSE; } - if (Z_OBJ_HT_PP(arg)->get_class_name == NULL || - Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_len, 0 TSRMLS_CC) != SUCCESS) { - zend_class_entry *ce; - - ce = zend_get_class_entry(*arg TSRMLS_CC); - if (!ce) { - RETURN_FALSE; - } + ce = zend_get_class_entry(arg TSRMLS_CC); + if (!ce) { + RETURN_FALSE; + } + + if (Z_OBJ_HT_P(arg)->get_class_name == NULL || + Z_OBJ_HT_P(arg)->get_class_name(arg, &name, &name_len, 0 TSRMLS_CC) != SUCCESS) { name = ce->name; name_len = ce->name_length; } - - RETURN_STRINGL(name, name_len, 1); + if (!fully_qualified + || (!(ce->ns && ce->ns != &CG(global_namespace) && ce->ns->name))) { + RETURN_STRINGL(name, name_len, 1); + } + + fullname= (char *)emalloc(name_len + ce->ns->name_length + 1 + 2); + strncpy(fullname, ce->ns->name, ce->ns->name_length + 1); + strncat(fullname, "::", 2); + strncat(fullname, name, name_len); + RETURN_STRINGL(fullname, name_len + ce->ns->name_length + 2, 0); } /* }}} */