@@ -697,11 +697,6 @@ PHP_FUNCTION(count)
697
697
zend_long mode = COUNT_NORMAL ;
698
698
zval * countable ;
699
699
700
- if (mode != COUNT_NORMAL && mode != COUNT_RECURSIVE ) {
701
- zend_value_error ("Mode value is invalid" );
702
- RETURN_THROWS ();
703
- }
704
-
705
700
if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "h!|l" , & array , & mode ) == SUCCESS ) {
706
701
if (array == NULL ) {
707
702
/* Intentionally not converted to an exception */
@@ -711,19 +706,27 @@ PHP_FUNCTION(count)
711
706
712
707
zend_long count ;
713
708
714
- if (mode == COUNT_RECURSIVE ) {
709
+ if (mode == COUNT_NORMAL ) {
710
+ count = zend_array_count (array );
711
+ } else if (mode == COUNT_RECURSIVE ) {
715
712
count = php_count_recursive (array );
716
713
} else {
717
- count = zend_array_count (array );
714
+ zend_value_error ("Mode value is invalid" );
715
+ RETURN_THROWS ();
718
716
}
719
717
RETURN_LONG (count );
720
718
}
721
719
722
720
/* Remove possibility to specify $mode when passing object? */
723
- if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "O|l" ,
724
- & countable , zend_ce_countable , & mode ) == SUCCESS ) {
725
- zval retval ;
726
- /* First, we check if the count handler is defined */
721
+ if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "o|l" ,
722
+ & countable , & mode ) == SUCCESS ) {
723
+
724
+ if (mode != COUNT_NORMAL && mode != COUNT_RECURSIVE ) {
725
+ zend_value_error ("Mode value is invalid" );
726
+ RETURN_THROWS ();
727
+ }
728
+
729
+ /* First, check if the handler is defined as it is faster */
727
730
if (Z_OBJ_HT_P (countable )-> count_elements ) {
728
731
RETVAL_LONG (1 );
729
732
if (SUCCESS == Z_OBJ_HT (* countable )-> count_elements (Z_OBJ_P (countable ), & Z_LVAL_P (return_value ))) {
0 commit comments