diff options
author | Stefan Marr <gron@php.net> | 2011-07-23 19:08:43 +0000 |
---|---|---|
committer | Stefan Marr <gron@php.net> | 2011-07-23 19:08:43 +0000 |
commit | 1fc4bc1d569864279058e40bdea8a47a51187da3 (patch) | |
tree | d6bf2b7cffa0b9e17ce2ce25f19aebe2d8a94d25 /ext/spl/php_spl.c | |
parent | 9a483afa5bf4917cf59132bc884ad7b7033938c5 (diff) | |
download | php-git-1fc4bc1d569864279058e40bdea8a47a51187da3.tar.gz |
Added missing class_uses(..) function to SPL to mirror class_implements(..).
# Was pointed out as missing in bug #55266.
Diffstat (limited to 'ext/spl/php_spl.c')
-rwxr-xr-x | ext/spl/php_spl.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index de59a02c93..8b49b6c5e1 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -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) |