|
|
|
@ -166,6 +166,35 @@ PHP_FUNCTION(class_implements) |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
/* {{{ proto array class_uses(mixed what [, bool autoload ]) |
|
|
|
Return all traits used by a class. */ |
|
|
|
PHP_FUNCTION(class_uses) |
|
|
|
{ |
|
|
|
zval *obj; |
|
|
|
zend_bool autoload = 1; |
|
|
|
zend_class_entry *ce; |
|
|
|
|
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &obj, &autoload) == FAILURE) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
if (Z_TYPE_P(obj) != IS_OBJECT && Z_TYPE_P(obj) != IS_STRING) { |
|
|
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "object or string expected"); |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
|
|
|
|
if (Z_TYPE_P(obj) == IS_STRING) { |
|
|
|
if (NULL == (ce = spl_find_ce_by_name(Z_STRVAL_P(obj), Z_STRLEN_P(obj), autoload TSRMLS_CC))) { |
|
|
|
RETURN_FALSE; |
|
|
|
} |
|
|
|
} else { |
|
|
|
ce = Z_OBJCE_P(obj); |
|
|
|
} |
|
|
|
|
|
|
|
array_init(return_value); |
|
|
|
spl_add_traits(return_value, ce, 1, ZEND_ACC_TRAIT TSRMLS_CC); |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
#define SPL_ADD_CLASS(class_name, z_list, sub, allow, ce_flags) \ |
|
|
|
spl_add_classes(spl_ce_ ## class_name, z_list, sub, allow, ce_flags TSRMLS_CC) |
|
|
|
|
|
|
|
@ -933,6 +962,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_implements, 0, 0, 1) |
|
|
|
ZEND_ARG_INFO(0, autoload) |
|
|
|
ZEND_END_ARG_INFO() |
|
|
|
|
|
|
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_uses, 0, 0, 1) |
|
|
|
ZEND_ARG_INFO(0, what) |
|
|
|
ZEND_ARG_INFO(0, autoload) |
|
|
|
ZEND_END_ARG_INFO() |
|
|
|
|
|
|
|
|
|
|
|
ZEND_BEGIN_ARG_INFO(arginfo_spl_classes, 0) |
|
|
|
ZEND_END_ARG_INFO() |
|
|
|
|
|
|
|
@ -977,6 +1012,7 @@ const zend_function_entry spl_functions[] = { |
|
|
|
PHP_FE(spl_autoload_call, arginfo_spl_autoload_call) |
|
|
|
PHP_FE(class_parents, arginfo_class_parents) |
|
|
|
PHP_FE(class_implements, arginfo_class_implements) |
|
|
|
PHP_FE(class_uses, arginfo_class_uses) |
|
|
|
PHP_FE(spl_object_hash, arginfo_spl_object_hash) |
|
|
|
#ifdef SPL_ITERATORS_H |
|
|
|
PHP_FE(iterator_to_array, arginfo_iterator_to_array) |
|
|
|
|