@@ -758,11 +758,6 @@ PHP_FUNCTION(count)
758
758
zend_long mode = COUNT_NORMAL ;
759
759
zval * countable ;
760
760
761
- if (mode != COUNT_NORMAL && mode != COUNT_RECURSIVE ) {
762
- zend_value_error ("Mode value is invalid" );
763
- RETURN_THROWS ();
764
- }
765
-
766
761
if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "h!|l" , & array , & mode ) == SUCCESS ) {
767
762
if (array == NULL ) {
768
763
/* Intentionally not converted to an exception */
@@ -772,19 +767,27 @@ PHP_FUNCTION(count)
772
767
773
768
zend_long count ;
774
769
775
- if (mode == COUNT_RECURSIVE ) {
770
+ if (mode == COUNT_NORMAL ) {
771
+ count = zend_array_count (array );
772
+ } else if (mode == COUNT_RECURSIVE ) {
776
773
count = php_count_recursive (array );
777
774
} else {
778
- count = zend_array_count (array );
775
+ zend_value_error ("Mode value is invalid" );
776
+ RETURN_THROWS ();
779
777
}
780
778
RETURN_LONG (count );
781
779
}
782
780
783
781
/* Remove possibility to specify $mode when passing object? */
784
- if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "O|l" ,
785
- & countable , zend_ce_countable , & mode ) == SUCCESS ) {
786
- zval retval ;
787
- /* First, we check if the count handler is defined */
782
+ if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "o|l" ,
783
+ & countable , & mode ) == SUCCESS ) {
784
+
785
+ if (mode != COUNT_NORMAL && mode != COUNT_RECURSIVE ) {
786
+ zend_value_error ("Mode value is invalid" );
787
+ RETURN_THROWS ();
788
+ }
789
+
790
+ /* First, check if the handler is defined as it is faster */
788
791
if (Z_OBJ_HT_P (countable )-> count_elements ) {
789
792
RETVAL_LONG (1 );
790
793
if (SUCCESS == Z_OBJ_HT (* countable )-> count_elements (Z_OBJ_P (countable ), & Z_LVAL_P (return_value ))) {
0 commit comments