Z_PARAM_LONG(mode)
ZEND_PARSE_PARAMETERS_END();
+ if (mode != COUNT_NORMAL && mode != COUNT_RECURSIVE) {
+ zend_value_error("Mode value is invalid");
+ RETURN_THROWS();
+ }
+
switch (Z_TYPE_P(array)) {
case IS_NULL:
/* Intentionally not converted to an exception */
--- /dev/null
+--TEST--
+Test count() function : invalid modes in weak type mode
+--FILE--
+<?php
+
+$modes = [
+ COUNT_NORMAL,
+ COUNT_RECURSIVE,
+ 0,
+ 1,
+ -1,
+ -1.45,
+ 2,
+ TRUE,
+ FALSE,
+ NULL,
+];
+
+foreach ($modes as $mode) {
+ try {
+ var_dump(count([], $mode));
+ } catch (\ValueError $error) {
+ echo $error->getMessage() . \PHP_EOL;
+ }
+}
+?>
+--EXPECT--
+int(0)
+int(0)
+int(0)
+int(0)
+Mode value is invalid
+Mode value is invalid
+Mode value is invalid
+int(0)
+int(0)
+int(0)
$arr = array(1, array("a", "b", "c"));
$arr[2] = &$arr[1];
-$mode_arr = array( COUNT_NORMAL, COUNT_RECURSIVE, 0, 1, -1, -1.45, 2, TRUE,
- FALSE, NULL);
-for( $i =0; $i < count( $mode_arr ); $i++) {
- echo "For mode '$mode_arr[$i]' count is => ";
- var_dump(count($arr, $mode_arr[$i]));
-}
-
-echo "\nDone";
+echo "Count normal" . \PHP_EOL;
+var_dump(count($arr, COUNT_NORMAL));
+echo "Count recursive" . \PHP_EOL;
+var_dump(count($arr, COUNT_RECURSIVE));
/* closing the resource handles */
fclose( $resource1 );
int(2)
-- Testing count() on arrays containing references --
-For mode '0' count is => int(3)
-For mode '1' count is => int(9)
-For mode '0' count is => int(3)
-For mode '1' count is => int(9)
-For mode '-1' count is => int(3)
-For mode '-1.45' count is => int(3)
-For mode '2' count is => int(3)
-For mode '1' count is => int(9)
-For mode '' count is => int(3)
-For mode '' count is => int(3)
-
-Done
+Count normal
+int(3)
+Count recursive
+int(9)