Raw version
Index: ext/standard/array.c
===================================================================
RCS file: /repository/php-src/ext/standard/array.c,v
retrieving revision 1.308.2.21.2.37.2.34
diff -u -p -r1.308.2.21.2.37.2.34 array.c
--- ext/standard/array.c	2 Jun 2008 11:20:59 -0000	1.308.2.21.2.37.2.34
+++ ext/standard/array.c	2 Jul 2008 08:11:53 -0000
@@ -319,9 +319,17 @@ PHP_FUNCTION(count)
 			break;
 		case IS_OBJECT: {
 #ifdef HAVE_SPL
-			/* it the object implements Countable we call its count() method */
 			zval *retval;
-
+#endif
+			/* first, we check if the 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) {
@@ -332,13 +340,6 @@ PHP_FUNCTION(count)
 				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);