diff --git a/ext/standard/string.c b/ext/standard/string.c index ae8deace66da3..dc88e375925ec 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1035,7 +1035,11 @@ PHP_FUNCTION(implode) if (pieces == NULL) { if (arg1_array == NULL) { - zend_type_error("%s(): Argument #1 ($array) must be of type array, string given", get_active_function_name()); + zend_type_error( + "%s(): If argument #1 ($separator) is of type string, " + "argument #2 ($array) must be of type array, null given", + get_active_function_name() + ); RETURN_THROWS(); } diff --git a/ext/standard/tests/strings/implode.phpt b/ext/standard/tests/strings/implode_basic.phpt similarity index 100% rename from ext/standard/tests/strings/implode.phpt rename to ext/standard/tests/strings/implode_basic.phpt diff --git a/ext/standard/tests/strings/implode_error.phpt b/ext/standard/tests/strings/implode_error.phpt new file mode 100644 index 0000000000000..417b3591e0dd2 --- /dev/null +++ b/ext/standard/tests/strings/implode_error.phpt @@ -0,0 +1,29 @@ +--TEST-- +Test implode() function: error conditions +--FILE-- +getMessage(), "\n"; +} + +/* NULL as pieces */ +try { + var_dump(implode("glue", NULL)); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} + +/* integer as glue */ +try { + var_dump(implode(12, "pieces")); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +?> +--EXPECT-- +implode(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given +implode(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given +implode(): Argument #2 ($array) must be of type ?array, string given diff --git a/ext/standard/tests/strings/implode1.phpt b/ext/standard/tests/strings/implode_variation.phpt similarity index 73% rename from ext/standard/tests/strings/implode1.phpt rename to ext/standard/tests/strings/implode_variation.phpt index d467a37dd3175..2cc0870f39f4f 100644 --- a/ext/standard/tests/strings/implode1.phpt +++ b/ext/standard/tests/strings/implode_variation.phpt @@ -3,23 +3,24 @@ Test implode() function --FILE-- getMessage() . "\n"; } try { - var_dump( implode(2, $sub_array) ); + var_dump(implode(2, $sub_array)); } catch (TypeError $exception) { echo $exception->getMessage() . "\n"; } @@ -90,7 +91,7 @@ $obj = new foo(); //creating new object $arr = array(); $arr[0] = &$obj; $arr[1] = &$obj; -var_dump( implode(",", $arr) ); +var_dump(implode(",", $arr)); var_dump($arr); /* Checking on resource types */ @@ -104,51 +105,7 @@ $dir_handle = opendir( __DIR__ ); /* store resources in array for comparison */ $resources = array($file_handle, $dir_handle); -var_dump( implode("::", $resources) ); - -echo "\n*** Testing error conditions ***\n"; - -/* only glue */ -try { - var_dump( implode("glue") ); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} - -/* int as pieces */ -try { - var_dump( implode("glue",1234) ); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} - -/* NULL as pieces */ -try { - var_dump( implode("glue", NULL) ); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} - -/* pieces as NULL array */ -try { - var_dump( implode(",", array(NULL)) ); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} - -/* integer as glue */ -try { - var_dump( implode(12, "pieces") ); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} - -/* NULL as glue */ -try { - var_dump( implode(NULL, "abcd") ); -} catch (TypeError $e) { - echo $e->getMessage(), "\n"; -} +var_dump(implode("::", $resources)); /* closing resource handles */ fclose($file_handle); @@ -214,6 +171,11 @@ array(6) { [5]=> string(21) "ccccccccccccccccccccc" } +string(0) "" +array(1) { + [0]=> + NULL +} *** Testing implode() with variations of glue *** -- Iteration 1 -- @@ -236,7 +198,7 @@ string(35) "2000-639010PHP000 0string%0with%0...%0" string(43) "2\00\0-639\01\0PHP\0\0\0 \0string%0with%0...%0" *** Testing implode() on empty string *** -implode(): Argument #1 ($array) must be of type array, string given +implode(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given *** Testing implode() on sub-arrays *** @@ -264,14 +226,4 @@ array(2) { *** Testing end() on resource type *** string(%d) "Resource id #%d::Resource id #%d" - -*** Testing error conditions *** -implode(): Argument #1 ($array) must be of type array, string given -implode(): Argument #2 ($array) must be of type ?array, int given -implode(): Argument #1 ($array) must be of type array, string given -string(0) "" -implode(): Argument #2 ($array) must be of type ?array, string given - -Deprecated: implode(): Passing null to parameter #1 ($separator) of type array|string is deprecated in %s on line %d -implode(): Argument #2 ($array) must be of type ?array, string given Done diff --git a/ext/standard/tests/strings/join_error.phpt b/ext/standard/tests/strings/join_error.phpt index c3cee28812d30..0029bcc34b08a 100644 --- a/ext/standard/tests/strings/join_error.phpt +++ b/ext/standard/tests/strings/join_error.phpt @@ -20,5 +20,5 @@ echo "Done\n"; *** Testing join() : error conditions *** -- Testing join() with less than expected no. of arguments -- -join(): Argument #1 ($array) must be of type array, string given +join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given Done diff --git a/ext/standard/tests/strings/join_variation2.phpt b/ext/standard/tests/strings/join_error1.phpt similarity index 87% rename from ext/standard/tests/strings/join_variation2.phpt rename to ext/standard/tests/strings/join_error1.phpt index f71f5c31f0cbb..0bb451a73d98d 100644 --- a/ext/standard/tests/strings/join_variation2.phpt +++ b/ext/standard/tests/strings/join_error1.phpt @@ -29,7 +29,6 @@ class test // array with different values $values = array ( - // integer values 0, 1, @@ -84,7 +83,7 @@ for($index = 0; $index < count($values); $index ++) { $pieces = $values [$index]; try { - var_dump( join($glue, $pieces) ); + var_dump(join($glue, $pieces)); } catch (TypeError $e) { echo $e->getMessage(), "\n"; } @@ -138,13 +137,13 @@ join(): Argument #2 ($array) must be of type ?array, string given -- Iteration 18 -- join(): Argument #2 ($array) must be of type ?array, string given -- Iteration 19 -- -join(): Argument #1 ($array) must be of type array, string given +join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given -- Iteration 20 -- -join(): Argument #1 ($array) must be of type array, string given +join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given -- Iteration 21 -- join(): Argument #2 ($array) must be of type ?array, resource given -- Iteration 22 -- -join(): Argument #1 ($array) must be of type array, string given +join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given -- Iteration 23 -- -join(): Argument #1 ($array) must be of type array, string given +join(): If argument #1 ($separator) is of type string, argument #2 ($array) must be of type array, null given Done