diff options
| author | Marcus Boerger <helly@php.net> | 2004-11-01 10:45:54 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2004-11-01 10:45:54 +0000 |
| commit | 8e3a8b1e8edb23613c5785d0ee2a3104c8a8d616 (patch) | |
| tree | 72fe8096732d19d824e3d6f8f76a4da2a27777bd /ext/standard/array.c | |
| parent | b557bdb665a69748afb885b3d3d47523d9a0973e (diff) | |
| download | php-git-8e3a8b1e8edb23613c5785d0ee2a3104c8a8d616.tar.gz | |
- Add interface Countable (PECL #30113)
Diffstat (limited to 'ext/standard/array.c')
| -rw-r--r-- | ext/standard/array.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index b346da25b2..218bbfb7f5 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -39,6 +39,7 @@ #include "win32/unistd.h" #endif #include "zend_globals.h" +#include "zend_interfaces.h" #include "php_globals.h" #include "php_array.h" #include "basic_functions.h" @@ -301,13 +302,25 @@ PHP_FUNCTION(count) case IS_ARRAY: RETURN_LONG (php_count_recursive (array, mode TSRMLS_CC)); break; - case IS_OBJECT: + case IS_OBJECT: { +#if HAVE_SPL + zend_class_entry **pce = NULL; + zval *retval; + + if (zend_lookup_class("countable", sizeof("countable")-1, &pce TSRMLS_CC) == SUCCESS) { + zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval); + RETVAL_LONG(Z_LVAL_P(retval)); + zval_ptr_dtor(&retval); + return; + } +#endif if (Z_OBJ_HT(*array)->count_elements) { RETVAL_LONG(1); if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value) TSRMLS_CC)) { return; } } + } default: RETURN_LONG(1); break; |
