cvs: php-src /ext/standard array.c
| From: | Etienne Kneuss | Date: | Wed, 09 Jul 2008 21:29:39 +0000 |
| Subject: | cvs: php-src /ext/standard array.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-50977@lists.php.net to get a copy of this message | ||
colder Wed Jul 9 21:29:39 2008 UTC
Modified files:
/php-src/ext/standard array.c
Log:
Fix resolution rule of count vs. handler
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.454&r2=1.455&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.454 php-src/ext/standard/array.c:1.455
--- php-src/ext/standard/array.c:1.454 Mon Jun 2 11:20:17 2008
+++ php-src/ext/standard/array.c Wed Jul 9 21:29:39 2008
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.454 2008/06/02 11:20:17 mattwil Exp $ */
+/* $Id: array.c,v 1.455 2008/07/09 21:29:39 colder Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -325,9 +325,17 @@
break;
case IS_OBJECT: {
#ifdef HAVE_SPL
- /* it the object implements Countable we call its count() method */
zval *retval;
-
+#endif
+ /* first, we check if an handler is defined */
+ if (Z_OBJ_HT_P(array)->count_elements) {
+ RETVAL_LONG(1);
+ if (SUCCESS == Z_OBJ_HT(*array)->count_elements(array, &Z_LVAL_P(return_value)
TSRMLS_CC)) {
+ return;
+ }
+ }
+#ifdef HAVE_SPL
+ /* if not and the object implements Countable we call its count() method */
if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array),
spl_ce_Countable TSRMLS_CC)) {
zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval);
if (retval) {
@@ -338,13 +346,6 @@
return;
}
#endif
- /* if not we return the number of properties (not taking visibility into account) */
- if (Z_OBJ_HT_P(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);