Commit 7b78eb4fcc2 for php.net

commit 7b78eb4fcc29c5cafa083c667558d0fe79c0c499
Author: NickSdot <catch.github.com.nicksdot@nicksdot.dev>
Date:   Wed Jul 29 10:13:53 2026 +0000

    ext/mbstring: applied fixers to improve test robustness

diff --git a/ext/mbstring/tests/bug43840.phpt b/ext/mbstring/tests/bug43840.phpt
index 887ff96f97b..04d7f8170d9 100644
--- a/ext/mbstring/tests/bug43840.phpt
+++ b/ext/mbstring/tests/bug43840.phpt
@@ -21,13 +21,13 @@
     try {
         var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') );
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     echo"--ASCII String:--\n";
     try {
         var_dump(mb_strpos('This is na English ta', 'a', $i));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
 }
 ?>
@@ -46,18 +46,18 @@

 -- Offset is 22 --
 --Multibyte String:--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --ASCII String:--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Offset is 53 --
 --Multibyte String:--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --ASCII String:--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Offset is 54 --
 --Multibyte String:--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --ASCII String:--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/bug43841.phpt b/ext/mbstring/tests/bug43841.phpt
index 62e8cdcefbe..a608666c2d2 100644
--- a/ext/mbstring/tests/bug43841.phpt
+++ b/ext/mbstring/tests/bug43841.phpt
@@ -19,41 +19,41 @@
     try {
         var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') );
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     echo "ASCII String:\n";
     echo "mb_strrpos:\n";
     try {
         var_dump(mb_strrpos('This is na English ta', 'a', $i));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     echo "strrpos:\n";
     try {
         var_dump(strrpos('This is na English ta', 'a', $i));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
 }
 ?>
 --EXPECT--
 -- Offset is -25 --
 Multibyte String:
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 ASCII String:
 mb_strrpos:
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 strrpos:
-strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Offset is -24 --
 Multibyte String:
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 ASCII String:
 mb_strrpos:
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 strrpos:
-strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Offset is -13 --
 Multibyte String:
diff --git a/ext/mbstring/tests/bug43994.phpt b/ext/mbstring/tests/bug43994.phpt
index cc6953808cc..5f8653708b6 100644
--- a/ext/mbstring/tests/bug43994.phpt
+++ b/ext/mbstring/tests/bug43994.phpt
@@ -19,14 +19,14 @@ function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build
 try {
     var_dump( mb_ereg($input, 'hello, world') );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "With \$regs arg:\n";
 try {
     var_dump(mb_ereg($input, 'hello, world', $mb_regs));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 var_dump($mb_regs);
@@ -35,9 +35,9 @@ function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build
 Without $regs arg:

 Deprecated: Function mb_ereg() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg(): Argument #1 ($pattern) must not be empty
+ValueError: mb_ereg(): Argument #1 ($pattern) must not be empty
 With $regs arg:

 Deprecated: Function mb_ereg() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg(): Argument #1 ($pattern) must not be empty
+ValueError: mb_ereg(): Argument #1 ($pattern) must not be empty
 NULL
diff --git a/ext/mbstring/tests/bug43998.phpt b/ext/mbstring/tests/bug43998.phpt
index 5be1bd2cc9f..a3352cef269 100644
--- a/ext/mbstring/tests/bug43998.phpt
+++ b/ext/mbstring/tests/bug43998.phpt
@@ -15,15 +15,15 @@
 try {
     var_dump( mb_strtolower($sourcestring, $input) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_strtoupper($sourcestring, $input) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "" given
-mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "" given
+ValueError: mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "" given
+ValueError: mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "" given
diff --git a/ext/mbstring/tests/bug45923.phpt b/ext/mbstring/tests/bug45923.phpt
index a1e3a35a2c0..772572a5be3 100644
--- a/ext/mbstring/tests/bug45923.phpt
+++ b/ext/mbstring/tests/bug45923.phpt
@@ -13,7 +13,7 @@ function section($func, $haystack, $needle)
         try {
             var_dump($func($haystack, $needle, $offset));
         } catch (\ValueError $e) {
-            echo $e->getMessage() . \PHP_EOL;
+            echo $e::class, ': ', $e->getMessage(), PHP_EOL;
         }
     }
 }
@@ -44,7 +44,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 bool(false)
 > Offset: -3
@@ -52,7 +52,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(8)
 > Offset: -20
-strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- mb_strpos -----------

@@ -67,7 +67,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 bool(false)
 > Offset: -3
@@ -75,7 +75,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(8)
 > Offset: -20
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- stripos -----------

@@ -90,7 +90,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 bool(false)
 > Offset: -3
@@ -98,7 +98,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(8)
 > Offset: -20
-stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- mb_stripos -----------

@@ -113,7 +113,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 bool(false)
 > Offset: -3
@@ -121,7 +121,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(8)
 > Offset: -20
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- strrpos -----------

@@ -136,7 +136,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 int(8)
 > Offset: -3
@@ -144,7 +144,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(4)
 > Offset: -20
-strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- mb_strrpos -----------

@@ -159,7 +159,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 int(8)
 > Offset: -3
@@ -167,7 +167,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(4)
 > Offset: -20
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- strripos -----------

@@ -182,7 +182,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 int(8)
 > Offset: -3
@@ -190,7 +190,7 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(4)
 > Offset: -20
-strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 ------- mb_strripos -----------

@@ -205,7 +205,7 @@ function section($func, $haystack, $needle)
 > Offset: 11
 bool(false)
 > Offset: 12
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 > Offset: -1
 int(8)
 > Offset: -3
@@ -213,4 +213,4 @@ function section($func, $haystack, $needle)
 > Offset: -6
 int(4)
 > Offset: -20
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/bug69079.phpt b/ext/mbstring/tests/bug69079.phpt
index b16e82525ef..dc8c2f6fc5b 100644
--- a/ext/mbstring/tests/bug69079.phpt
+++ b/ext/mbstring/tests/bug69079.phpt
@@ -12,7 +12,7 @@
 try {
     var_dump(mb_substitute_character(0xD800)); // Surrogate (illegal)
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(bin2hex(mb_scrub("\xff")));

@@ -22,7 +22,7 @@
 try {
     mb_substitute_character(0x8fa1ef); // EUC-JP-2004 encoding of U+50AA (illegal)
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(bin2hex(mb_scrub("\x8d")));

@@ -33,8 +33,8 @@
 --EXPECT--
 bool(true)
 string(8) "f09f9880"
-mb_substitute_character(): Argument #1 ($substitute_character) is not a valid codepoint
+ValueError: mb_substitute_character(): Argument #1 ($substitute_character) is not a valid codepoint
 string(2) "3f"
-mb_substitute_character(): Argument #1 ($substitute_character) is not a valid codepoint
+ValueError: mb_substitute_character(): Argument #1 ($substitute_character) is not a valid codepoint
 string(2) "63"
 string(6) "8fa1ef"
diff --git a/ext/mbstring/tests/bug72164.phpt b/ext/mbstring/tests/bug72164.phpt
index 2b8f3950d92..bf5ab64d903 100644
--- a/ext/mbstring/tests/bug72164.phpt
+++ b/ext/mbstring/tests/bug72164.phpt
@@ -15,10 +15,10 @@
     $var8 = mb_ereg_replace($var2,$var3,$var3,$var0);
     var_dump($var8);
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECTF--
 Deprecated: Function mb_ereg_replace() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-Option "e" is not supported
+ValueError: Option "e" is not supported
diff --git a/ext/mbstring/tests/bug72399.phpt b/ext/mbstring/tests/bug72399.phpt
index bf9880c0ab4..87406a07661 100644
--- a/ext/mbstring/tests/bug72399.phpt
+++ b/ext/mbstring/tests/bug72399.phpt
@@ -16,7 +16,7 @@
 try {
     $var13 = mb_ereg_search_pos();
 } catch (\Error $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 ?>
 --EXPECTF--
@@ -27,4 +27,4 @@
 string(0) ""

 Deprecated: Function mb_ereg_search_pos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-No pattern was provided
+Error: No pattern was provided
diff --git a/ext/mbstring/tests/bug76704.phpt b/ext/mbstring/tests/bug76704.phpt
index 433dcdfa6cc..60de8e48ae2 100644
--- a/ext/mbstring/tests/bug76704.phpt
+++ b/ext/mbstring/tests/bug76704.phpt
@@ -7,14 +7,14 @@
 try {
     var_dump(mb_detect_order('Foo, UTF-8'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_detect_order(['Foo', 'UTF-8']));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 ?>
 --EXPECT--
-mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "Foo"
-mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "Foo"
+ValueError: mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "Foo"
+ValueError: mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "Foo"
diff --git a/ext/mbstring/tests/bug76999.phpt b/ext/mbstring/tests/bug76999.phpt
index 5c6dc442573..ed5cdb37281 100644
--- a/ext/mbstring/tests/bug76999.phpt
+++ b/ext/mbstring/tests/bug76999.phpt
@@ -15,7 +15,7 @@
 try {
     var_dump(mb_regex_set_options("a"));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(mb_regex_set_options());
 ?>
@@ -32,7 +32,7 @@
 string(3) "imd"

 Deprecated: Function mb_regex_set_options() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-Option "a" is not supported
+ValueError: Option "a" is not supported

 Deprecated: Function mb_regex_set_options() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(2) "mr"
diff --git a/ext/mbstring/tests/bug79149.phpt b/ext/mbstring/tests/bug79149.phpt
index 02a705b9d3f..4c0225bc22e 100644
--- a/ext/mbstring/tests/bug79149.phpt
+++ b/ext/mbstring/tests/bug79149.phpt
@@ -7,23 +7,23 @@
 try {
     var_dump(mb_convert_encoding("", "UTF-8", [0]));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_convert_encoding('foo', 'UTF-8', array(['bar'], ['baz'])));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_convert_encoding('foo', 'UTF-8', array("foo\0bar")));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECTF--
-mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "0"
+ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "0"

 Warning: Array to string conversion in %s on line %d
-mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "Array"
-mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "foo"
+ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "Array"
+ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "foo"
diff --git a/ext/mbstring/tests/bug79441.phpt b/ext/mbstring/tests/bug79441.phpt
index 7d89dd03ef2..2e77c289c92 100644
--- a/ext/mbstring/tests/bug79441.phpt
+++ b/ext/mbstring/tests/bug79441.phpt
@@ -10,9 +10,9 @@
 try {
     mb_chr(0xd800);
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_chr() does not support the "UTF-7" encoding
+ValueError: mb_chr() does not support the "UTF-7" encoding
diff --git a/ext/mbstring/tests/empty_pattern.phpt b/ext/mbstring/tests/empty_pattern.phpt
index c7a2ca285c2..11482b14524 100644
--- a/ext/mbstring/tests/empty_pattern.phpt
+++ b/ext/mbstring/tests/empty_pattern.phpt
@@ -12,7 +12,7 @@
 try {
     mb_ereg_search_init("","","");
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 mb_split("","");
@@ -20,15 +20,15 @@
 try {
     mb_ereg_search_regs();
 } catch (\Error $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECTF--
 Deprecated: Function mb_ereg_search_init() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg_search_init(): Argument #2 ($pattern) must not be empty
+ValueError: mb_ereg_search_init(): Argument #2 ($pattern) must not be empty

 Deprecated: Function mb_split() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d

 Deprecated: Function mb_ereg_search_regs() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-No pattern was provided
+Error: No pattern was provided
diff --git a/ext/mbstring/tests/gh16360.phpt b/ext/mbstring/tests/gh16360.phpt
index 4e2e8fb4bfc..5cbbbe0563b 100644
--- a/ext/mbstring/tests/gh16360.phpt
+++ b/ext/mbstring/tests/gh16360.phpt
@@ -7,17 +7,16 @@
 try {
 	mb_substr("abcd", PHP_INT_MIN, 4, "UTF-8");
 } catch (\ValueError $e) {
-	echo $e->getMessage() . PHP_EOL;
+	echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
 	mb_substr("abcd", 0, PHP_INT_MIN, "UTF-8");
 } catch (\ValueError $e) {
-	echo $e->getMessage() . PHP_EOL;
+	echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(mb_substr("abcd", PHP_INT_MAX, PHP_INT_MAX, "UTF-8"));
 ?>
 --EXPECTF--
-mb_substr(): Argument #2 ($start) must be between %s and %s
-mb_substr(): Argument #3 ($length) must be between %s and %s
+ValueError: mb_substr(): Argument #2 ($start) must be between %s and %s
+ValueError: mb_substr(): Argument #3 ($length) must be between %s and %s
 string(0) ""
-
diff --git a/ext/mbstring/tests/gh20833.phpt b/ext/mbstring/tests/gh20833.phpt
index 099aa337923..6ebb798eee7 100644
--- a/ext/mbstring/tests/gh20833.phpt
+++ b/ext/mbstring/tests/gh20833.phpt
@@ -9,7 +9,7 @@
 try {
     mb_str_pad($utf32, 5, "1" /* invalid for encoding */, STR_PAD_RIGHT, "UTF-32");
 } catch (ValueError $e) {
-    echo $e::class, ": ", $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/mbstring/tests/mb_check_encoding_invalid_encodings.phpt b/ext/mbstring/tests/mb_check_encoding_invalid_encodings.phpt
index 1e9b11e18b4..27586ec6c15 100644
--- a/ext/mbstring/tests/mb_check_encoding_invalid_encodings.phpt
+++ b/ext/mbstring/tests/mb_check_encoding_invalid_encodings.phpt
@@ -12,31 +12,31 @@
 try {
     var_dump(mb_check_encoding($str, 'BAD'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_check_encoding($arr, 'BAD'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo 'Using "pass" as encoding' . \PHP_EOL;
 try {
     var_dump(mb_check_encoding($str, 'pass'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_check_encoding($arr, 'pass'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 Using "BAD" as encoding
-mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "BAD" given
-mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "BAD" given
+ValueError: mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "BAD" given
+ValueError: mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "BAD" given
 Using "pass" as encoding
-mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "pass" given
-mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "pass" given
+ValueError: mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "pass" given
+ValueError: mb_check_encoding(): Argument #2 ($encoding) must be a valid encoding, "pass" given
diff --git a/ext/mbstring/tests/mb_chr.phpt b/ext/mbstring/tests/mb_chr.phpt
index fd9a4eebbf6..b2f23b29753 100644
--- a/ext/mbstring/tests/mb_chr.phpt
+++ b/ext/mbstring/tests/mb_chr.phpt
@@ -15,34 +15,34 @@
 try {
     var_dump( mb_chr(0xd800, "typo") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_chr(0xd800, "pass") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_chr(0xd800, "jis") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_chr(0xd800, "cp50222") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_chr(0xd800, "utf-7") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 mb_internal_encoding("utf-7");
 try {
     var_dump( mb_chr(0xd800) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -51,9 +51,9 @@
 bool(true)
 bool(true)
 bool(true)
-mb_chr(): Argument #2 ($encoding) must be a valid encoding, "typo" given
-mb_chr(): Argument #2 ($encoding) must be a valid encoding, "pass" given
-mb_chr() does not support the "JIS" encoding
-mb_chr() does not support the "CP50222" encoding
-mb_chr() does not support the "UTF-7" encoding
-mb_chr() does not support the "UTF-7" encoding
+ValueError: mb_chr(): Argument #2 ($encoding) must be a valid encoding, "typo" given
+ValueError: mb_chr(): Argument #2 ($encoding) must be a valid encoding, "pass" given
+ValueError: mb_chr() does not support the "JIS" encoding
+ValueError: mb_chr() does not support the "CP50222" encoding
+ValueError: mb_chr() does not support the "UTF-7" encoding
+ValueError: mb_chr() does not support the "UTF-7" encoding
diff --git a/ext/mbstring/tests/mb_convert_case_various_mode.phpt b/ext/mbstring/tests/mb_convert_case_various_mode.phpt
index 70dcbfcd66a..51411deec9c 100644
--- a/ext/mbstring/tests/mb_convert_case_various_mode.phpt
+++ b/ext/mbstring/tests/mb_convert_case_various_mode.phpt
@@ -18,7 +18,7 @@
 try {
     var_dump(mb_convert_case('foo BAR Spaß', 100));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- Greek letter sigma --\n";
@@ -64,7 +64,7 @@
 string(13) "foo bar spaß"
 string(13) "Foo Bar Spaß"
 string(13) "foo bar spaß"
-mb_convert_case(): Argument #2 ($mode) must be one of the MB_CASE_* constants
+ValueError: mb_convert_case(): Argument #2 ($mode) must be one of the MB_CASE_* constants

 -- Greek letter sigma --
 string(2) "Σ"
diff --git a/ext/mbstring/tests/mb_convert_encoding.phpt b/ext/mbstring/tests/mb_convert_encoding.phpt
index bb460961e9a..f57ef80340c 100644
--- a/ext/mbstring/tests/mb_convert_encoding.phpt
+++ b/ext/mbstring/tests/mb_convert_encoding.phpt
@@ -89,7 +89,7 @@ function tryBadConversion($str, $encoding) {
     try {
         var_dump(mb_convert_encoding($str, $encoding));
     } catch (ValueError $e) {
-        echo $e->getMessage(), "\n";
+        echo $e::class, ': ', $e->getMessage(), "\n";
     }
 }

@@ -122,7 +122,7 @@ function tryBadConversion($str, $encoding) {
 == INVALID PARAMETER ==
 INT: 1234
 EUC-JP:
-mb_convert_encoding(): Argument #2 ($to_encoding) must be a valid encoding, "BAD" given
+ValueError: mb_convert_encoding(): Argument #2 ($to_encoding) must be a valid encoding, "BAD" given

 Deprecated: mb_convert_encoding(): Handling QPrint via mbstring is deprecated; use quoted_printable_encode/quoted_printable_decode instead in %s on line %d
 string(3) "abc"
diff --git a/ext/mbstring/tests/mb_convert_encoding_empty_encoding_list.phpt b/ext/mbstring/tests/mb_convert_encoding_empty_encoding_list.phpt
index 52068180935..8ac50eb902a 100644
--- a/ext/mbstring/tests/mb_convert_encoding_empty_encoding_list.phpt
+++ b/ext/mbstring/tests/mb_convert_encoding_empty_encoding_list.phpt
@@ -10,15 +10,15 @@
 try {
     var_dump( mb_convert_encoding($string, 'UTF-8', ''));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_convert_encoding($string, 'UTF-8', []));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_convert_encoding(): Argument #3 ($from_encoding) must specify at least one encoding
-mb_convert_encoding(): Argument #3 ($from_encoding) must specify at least one encoding
+ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) must specify at least one encoding
+ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) must specify at least one encoding
diff --git a/ext/mbstring/tests/mb_convert_kana.phpt b/ext/mbstring/tests/mb_convert_kana.phpt
index b263fec0f1b..38762255c15 100644
--- a/ext/mbstring/tests/mb_convert_kana.phpt
+++ b/ext/mbstring/tests/mb_convert_kana.phpt
@@ -101,7 +101,7 @@ function tryBadFlags($flags) {
     mb_convert_kana('abc', $flags, 'UTF-8');
     echo "BAD! mb_convert_kana should have thrown an exception for flags: $flags\n";
   } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
   }
 }
 function tryIncompatibleFlags($flag1, $flag2) {
@@ -129,7 +129,7 @@ function tryIncompatibleFlags($flag1, $flag2) {
 try {
   mb_convert_kana($zenKakuA, 'Z', 'UTF-8');
 } catch (ValueError $e) {
-  echo $e->getMessage() . "\n";
+  echo $e::class, ': ', $e->getMessage(), "\n";
 }

 // Regression test: Two codepoints collapsed into one, just one position
@@ -220,37 +220,37 @@ function tryIncompatibleFlags($flag1, $flag2) {

 0000

-mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'a' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'a' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'r' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'r' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'n' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'n' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'a' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'a' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'a' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'a' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'r' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'r' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'n' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'n' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'S' and 's' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'S' and 's' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'H' and 'K' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'H' and 'K' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'C' and 'c' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'C' and 'c' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'M' and 'm' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'M' and 'm' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'C' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'C' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'c' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'c' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'C' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'C' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'c' flags
-mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'c' flags
-mb_convert_kana(): Argument #2 ($mode) contains invalid flag: 'Z'
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'a' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'a' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'r' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'r' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'n' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'A' and 'n' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'a' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'a' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'a' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'a' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'r' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'R' and 'r' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'n' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'N' and 'n' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'S' and 's' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'S' and 's' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'H' and 'K' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'H' and 'K' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'C' and 'c' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'C' and 'c' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'M' and 'm' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'M' and 'm' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'C' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'C' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'c' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'h' and 'c' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'C' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'C' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'c' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) must not combine 'k' and 'c' flags
+ValueError: mb_convert_kana(): Argument #2 ($mode) contains invalid flag: 'Z'
 --CREDITS--
 Jason Easter <easter@phpug-wuerzburg.de>
 PHPUG Würzburg <phpug-wuerzburg.de>
diff --git a/ext/mbstring/tests/mb_convert_variables_empty_encoding_list.phpt b/ext/mbstring/tests/mb_convert_variables_empty_encoding_list.phpt
index 6134d7cd216..31d9c2265e0 100644
--- a/ext/mbstring/tests/mb_convert_variables_empty_encoding_list.phpt
+++ b/ext/mbstring/tests/mb_convert_variables_empty_encoding_list.phpt
@@ -10,15 +10,15 @@
 try {
     var_dump( mb_convert_variables('UTF-8', '', $string));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_convert_variables('UTF-8', [], $string));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_convert_variables(): Argument #2 ($from_encoding) must specify at least one encoding
-mb_convert_variables(): Argument #2 ($from_encoding) must specify at least one encoding
+ValueError: mb_convert_variables(): Argument #2 ($from_encoding) must specify at least one encoding
+ValueError: mb_convert_variables(): Argument #2 ($from_encoding) must specify at least one encoding
diff --git a/ext/mbstring/tests/mb_decode_numericentity_errors.phpt b/ext/mbstring/tests/mb_decode_numericentity_errors.phpt
index 5c08fec890d..ad81401c9d6 100644
--- a/ext/mbstring/tests/mb_decode_numericentity_errors.phpt
+++ b/ext/mbstring/tests/mb_decode_numericentity_errors.phpt
@@ -8,16 +8,16 @@
     $convmap = array(0xFF, 0x2FFFF, 0); // 3 elements
     echo mb_decode_numericentity('str', $convmap, "UTF-8") . "\n";
 } catch (ValueError $ex) {
-    echo $ex->getMessage(), "\n";
+    echo $ex::class, ': ', $ex->getMessage(), "\n";
 }
 try {
     $convmap = array(0xFF, "not an int", 0, 0); // 3 elements
     echo mb_decode_numericentity('str', $convmap, "UTF-8") . "\n";
 } catch (ValueError $ex) {
-    echo $ex->getMessage(), "\n";
+    echo $ex::class, ': ', $ex->getMessage(), "\n";
 }

 ?>
 --EXPECT--
-mb_decode_numericentity(): Argument #2 ($map) must have a multiple of 4 elements
-mb_decode_numericentity(): Argument #2 ($map) must only be composed of values of type int
+ValueError: mb_decode_numericentity(): Argument #2 ($map) must have a multiple of 4 elements
+ValueError: mb_decode_numericentity(): Argument #2 ($map) must only be composed of values of type int
diff --git a/ext/mbstring/tests/mb_detect_encoding.phpt b/ext/mbstring/tests/mb_detect_encoding.phpt
index 2721ec3c83c..9a3e908ec61 100644
--- a/ext/mbstring/tests/mb_detect_encoding.phpt
+++ b/ext/mbstring/tests/mb_detect_encoding.phpt
@@ -134,7 +134,7 @@
 try {
     var_dump(mb_detect_encoding($euc_jp, 'BAD'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "== BOM TEST ==\n";
@@ -450,7 +450,7 @@ function test($strings, $encodings) {
 == INVALID PARAMETER ==
 INT: EUC-JP
 EUC-JP: EUC-JP
-mb_detect_encoding(): Argument #2 ($encodings) contains invalid encoding "BAD"
+ValueError: mb_detect_encoding(): Argument #2 ($encodings) contains invalid encoding "BAD"
 == BOM TEST ==
 string(5) "UTF-8"
 string(8) "UTF-16BE"
diff --git a/ext/mbstring/tests/mb_detect_encoding_empty_encoding_list.phpt b/ext/mbstring/tests/mb_detect_encoding_empty_encoding_list.phpt
index bb5f02964e8..6d40f94d434 100644
--- a/ext/mbstring/tests/mb_detect_encoding_empty_encoding_list.phpt
+++ b/ext/mbstring/tests/mb_detect_encoding_empty_encoding_list.phpt
@@ -10,15 +10,15 @@
 try {
     var_dump( mb_detect_encoding($string, ''));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_detect_encoding($string, []));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_detect_encoding(): Argument #2 ($encodings) must specify at least one encoding
-mb_detect_encoding(): Argument #2 ($encodings) must specify at least one encoding
+ValueError: mb_detect_encoding(): Argument #2 ($encodings) must specify at least one encoding
+ValueError: mb_detect_encoding(): Argument #2 ($encodings) must specify at least one encoding
diff --git a/ext/mbstring/tests/mb_detect_order.phpt b/ext/mbstring/tests/mb_detect_order.phpt
index a6a9c179a6c..daaf42c883b 100644
--- a/ext/mbstring/tests/mb_detect_order.phpt
+++ b/ext/mbstring/tests/mb_detect_order.phpt
@@ -38,7 +38,7 @@
 try {
     var_dump(mb_detect_order('BAD_NAME'));
 } catch (\ValueError $e) {
-     echo $e->getMessage() . \PHP_EOL;
+     echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(mb_detect_order());

@@ -46,7 +46,7 @@
 try {
     var_dump(mb_detect_order($a));
 } catch (\ValueError $e) {
-     echo $e->getMessage() . \PHP_EOL;
+     echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(mb_detect_order());

@@ -59,7 +59,7 @@
 OK_ARRAY
 ASCII, JIS, EUC-JP, UTF-8
 == INVALID PARAMETER ==
-mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "BAD_NAME"
+ValueError: mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "BAD_NAME"
 array(4) {
   [0]=>
   string(5) "ASCII"
@@ -70,7 +70,7 @@
   [3]=>
   string(5) "UTF-8"
 }
-mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "BAD_NAME"
+ValueError: mb_detect_order(): Argument #1 ($encoding) contains invalid encoding "BAD_NAME"
 array(4) {
   [0]=>
   string(5) "ASCII"
diff --git a/ext/mbstring/tests/mb_detect_order_empty_encoding_list.phpt b/ext/mbstring/tests/mb_detect_order_empty_encoding_list.phpt
index 2094fde2b6f..b214121b768 100644
--- a/ext/mbstring/tests/mb_detect_order_empty_encoding_list.phpt
+++ b/ext/mbstring/tests/mb_detect_order_empty_encoding_list.phpt
@@ -8,15 +8,15 @@
 try {
     var_dump( mb_detect_order(''));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_detect_order([]));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_detect_order(): Argument #1 ($encoding) must specify at least one encoding
-mb_detect_order(): Argument #1 ($encoding) must specify at least one encoding
+ValueError: mb_detect_order(): Argument #1 ($encoding) must specify at least one encoding
+ValueError: mb_detect_order(): Argument #1 ($encoding) must specify at least one encoding
diff --git a/ext/mbstring/tests/mb_detect_order_with_ini_set.phpt b/ext/mbstring/tests/mb_detect_order_with_ini_set.phpt
index ba59f3388b8..8030bf5c2b5 100644
--- a/ext/mbstring/tests/mb_detect_order_with_ini_set.phpt
+++ b/ext/mbstring/tests/mb_detect_order_with_ini_set.phpt
@@ -57,4 +57,3 @@
   [0]=>
   string(5) "UTF-8"
 }
-
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic4.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic4.phpt
index 02206efab35..bab56a3179b 100644
--- a/ext/mbstring/tests/mb_encode_mimeheader_basic4.phpt
+++ b/ext/mbstring/tests/mb_encode_mimeheader_basic4.phpt
@@ -134,7 +134,7 @@
 	mb_internal_encoding('Quoted-Printable');
 	var_dump(mb_encode_mimeheader("=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=00=00=00=00=00=00=00=01=00=00=00=00=00=00=00850r=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=0D=00=00=00=0050r=08=0DCP850r850r0r", "Quoted-Printable", "B", "", 184));
 } catch (\ValueError $e) {
-	echo $e->getMessage() . \PHP_EOL;
+	echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "Done";
@@ -182,5 +182,5 @@
 string(142) "xx =?UTF-8?B?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB?=
  =?UTF-8?B?QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIA==?="
 string(690) "=?ISO-2022-JP?B?bmU/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/cxskQiFEGyhCPw==?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/MRskQiFEGyhCPxskQiFEGyhCPw==?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/GyRCIUQbKEI/?=A =?ISO-2022-JP?B?GyRCIUQbKEI/GyRCIUQbKEI/MQ==?="
-mb_encode_mimeheader(): Argument #2 ($charset) "Quoted-Printable" cannot be used for MIME header encoding
+ValueError: mb_encode_mimeheader(): Argument #2 ($charset) "Quoted-Printable" cannot be used for MIME header encoding
 Done
diff --git a/ext/mbstring/tests/mb_encode_mimeheader_crash.phpt b/ext/mbstring/tests/mb_encode_mimeheader_crash.phpt
index 2505d4c4ad9..63a7830b30a 100644
--- a/ext/mbstring/tests/mb_encode_mimeheader_crash.phpt
+++ b/ext/mbstring/tests/mb_encode_mimeheader_crash.phpt
@@ -11,11 +11,11 @@ function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is n
 try {
     var_dump(mb_encode_mimeheader("abc", "UTF7-IMAP", "Q"));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "Done\n";
 ?>
 --EXPECT--
-mb_encode_mimeheader(): Argument #2 ($charset) "UTF7-IMAP" cannot be used for MIME header encoding
+ValueError: mb_encode_mimeheader(): Argument #2 ($charset) "UTF7-IMAP" cannot be used for MIME header encoding
 Done
diff --git a/ext/mbstring/tests/mb_encode_numericentity_errors.phpt b/ext/mbstring/tests/mb_encode_numericentity_errors.phpt
index 8b41bb87e0c..bd5df37a3b9 100644
--- a/ext/mbstring/tests/mb_encode_numericentity_errors.phpt
+++ b/ext/mbstring/tests/mb_encode_numericentity_errors.phpt
@@ -8,16 +8,16 @@
     $convmap = array(0xFF, 0x2FFFF, 0); // 3 elements
     echo mb_encode_numericentity('str', $convmap, "UTF-8") . "\n";
 } catch (ValueError $ex) {
-    echo $ex->getMessage(), "\n";
+    echo $ex::class, ': ', $ex->getMessage(), "\n";
 }
 try {
     $convmap = array(0xFF, "not an int", 0, 0); // 3 elements
     echo mb_encode_numericentity('str', $convmap, "UTF-8") . "\n";
 } catch (ValueError $ex) {
-    echo $ex->getMessage(), "\n";
+    echo $ex::class, ': ', $ex->getMessage(), "\n";
 }

 ?>
 --EXPECT--
-mb_encode_numericentity(): Argument #2 ($map) must have a multiple of 4 elements
-mb_encode_numericentity(): Argument #2 ($map) must only be composed of values of type int
+ValueError: mb_encode_numericentity(): Argument #2 ($map) must have a multiple of 4 elements
+ValueError: mb_encode_numericentity(): Argument #2 ($map) must only be composed of values of type int
diff --git a/ext/mbstring/tests/mb_encoding_aliases.phpt b/ext/mbstring/tests/mb_encoding_aliases.phpt
index 0c95d87e3ab..2fd3f7d363e 100644
--- a/ext/mbstring/tests/mb_encoding_aliases.phpt
+++ b/ext/mbstring/tests/mb_encoding_aliases.phpt
@@ -13,7 +13,7 @@
 try {
     var_dump(mb_encoding_aliases("BAD"));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 ?>
 --EXPECT--
@@ -47,4 +47,4 @@
   [0]=>
   string(6) "binary"
 }
-mb_encoding_aliases(): Argument #1 ($encoding) must be a valid encoding, "BAD" given
+ValueError: mb_encoding_aliases(): Argument #1 ($encoding) must be a valid encoding, "BAD" given
diff --git a/ext/mbstring/tests/mb_ereg1.phpt b/ext/mbstring/tests/mb_ereg1.phpt
index a92b796423d..47de5bfa73d 100644
--- a/ext/mbstring/tests/mb_ereg1.phpt
+++ b/ext/mbstring/tests/mb_ereg1.phpt
@@ -19,7 +19,7 @@
     try {
         var_dump(mb_ereg($args[0], $args[1], $args[2]));
     } catch (\TypeError|\ValueError $e) {
-        echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     var_dump($args);
 }
diff --git a/ext/mbstring/tests/mb_ereg_search_setpos.phpt b/ext/mbstring/tests/mb_ereg_search_setpos.phpt
index 6153d86282d..8a8bc906846 100644
--- a/ext/mbstring/tests/mb_ereg_search_setpos.phpt
+++ b/ext/mbstring/tests/mb_ereg_search_setpos.phpt
@@ -15,7 +15,7 @@
 try {
     var_dump(mb_ereg_search_setpos(-1)); // Error
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 mb_ereg_search_init($test_str);
@@ -26,12 +26,12 @@
     try {
         var_dump(mb_ereg_search_setpos($pos));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     try {
         var_dump(mb_ereg_search_getpos());
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
 }
 ?>
@@ -42,7 +42,7 @@
 bool(true)

 Deprecated: Function mb_ereg_search_setpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg_search_setpos(): Argument #1 ($offset) is out of range
+ValueError: mb_ereg_search_setpos(): Argument #1 ($offset) is out of range

 Deprecated: Function mb_ereg_search_init() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d

@@ -65,7 +65,7 @@
 * Position: 21 :

 Deprecated: Function mb_ereg_search_setpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg_search_setpos(): Argument #1 ($offset) is out of range
+ValueError: mb_ereg_search_setpos(): Argument #1 ($offset) is out of range

 Deprecated: Function mb_ereg_search_getpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 int(20)
@@ -73,7 +73,7 @@
 * Position: 25 :

 Deprecated: Function mb_ereg_search_setpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg_search_setpos(): Argument #1 ($offset) is out of range
+ValueError: mb_ereg_search_setpos(): Argument #1 ($offset) is out of range

 Deprecated: Function mb_ereg_search_getpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 int(20)
@@ -105,7 +105,7 @@
 * Position: -30 :

 Deprecated: Function mb_ereg_search_setpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_ereg_search_setpos(): Argument #1 ($offset) is out of range
+ValueError: mb_ereg_search_setpos(): Argument #1 ($offset) is out of range

 Deprecated: Function mb_ereg_search_getpos() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 int(0)
diff --git a/ext/mbstring/tests/mb_http_input_errors.phpt b/ext/mbstring/tests/mb_http_input_errors.phpt
index 88b3984c6bb..8c1367641c1 100644
--- a/ext/mbstring/tests/mb_http_input_errors.phpt
+++ b/ext/mbstring/tests/mb_http_input_errors.phpt
@@ -8,15 +8,15 @@
 try {
     var_dump(mb_http_input('PN'));
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(mb_http_input('Q'));
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 ?>
 --EXPECT--
-mb_http_input(): Argument #1 ($type) must be one of "G", "P", "C", "S", "I", or "L"
-mb_http_input(): Argument #1 ($type) must be one of "G", "P", "C", "S", "I", or "L"
+ValueError: mb_http_input(): Argument #1 ($type) must be one of "G", "P", "C", "S", "I", or "L"
+ValueError: mb_http_input(): Argument #1 ($type) must be one of "G", "P", "C", "S", "I", or "L"
diff --git a/ext/mbstring/tests/mb_http_output.phpt b/ext/mbstring/tests/mb_http_output.phpt
index 9857e37e0a8..2351b618c90 100644
--- a/ext/mbstring/tests/mb_http_output.phpt
+++ b/ext/mbstring/tests/mb_http_output.phpt
@@ -46,7 +46,7 @@
     $r = mb_http_output('BAD_NAME');
     print 'NG_BAD_SET' . \PHP_EOL;
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 $enc = mb_http_output();
 print "$enc\n";
@@ -64,5 +64,5 @@
 OK_EUC-JP_SET
 EUC-JP
 == INVALID PARAMETER ==
-mb_http_output(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
+ValueError: mb_http_output(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
 EUC-JP
diff --git a/ext/mbstring/tests/mb_internal_encoding.phpt b/ext/mbstring/tests/mb_internal_encoding.phpt
index 8e5356e2ada..9636e74b8d3 100644
--- a/ext/mbstring/tests/mb_internal_encoding.phpt
+++ b/ext/mbstring/tests/mb_internal_encoding.phpt
@@ -34,7 +34,7 @@
     $r = mb_internal_encoding('BAD_NAME');
     print 'NG_BAD_SET' . \PHP_EOL;
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 $enc = mb_internal_encoding();
@@ -49,5 +49,5 @@
 OK_ASCII_SET
 ASCII
 == INVALID PARAMETER ==
-mb_internal_encoding(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
+ValueError: mb_internal_encoding(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
 ASCII
diff --git a/ext/mbstring/tests/mb_internal_encoding_error2.phpt b/ext/mbstring/tests/mb_internal_encoding_error2.phpt
index 300525a1c2a..a81e73758b2 100644
--- a/ext/mbstring/tests/mb_internal_encoding_error2.phpt
+++ b/ext/mbstring/tests/mb_internal_encoding_error2.phpt
@@ -13,10 +13,10 @@
 try {
     var_dump(mb_internal_encoding('unknown-encoding'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_internal_encoding() : error conditions ***
-mb_internal_encoding(): Argument #1 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_internal_encoding(): Argument #1 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_language.phpt b/ext/mbstring/tests/mb_language.phpt
index 3966c5d439e..b828a4388cb 100644
--- a/ext/mbstring/tests/mb_language.phpt
+++ b/ext/mbstring/tests/mb_language.phpt
@@ -23,7 +23,7 @@
 try {
     var_dump(mb_language('Pig Latin'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 var_dump(mb_language());
 ?>
@@ -37,5 +37,5 @@
 Confirm language was changed:
 string(7) "English"
 Try changing to a non-existent language:
-mb_language(): Argument #1 ($language) must be a valid language, "Pig Latin" given
+ValueError: mb_language(): Argument #1 ($language) must be a valid language, "Pig Latin" given
 string(7) "neutral"
diff --git a/ext/mbstring/tests/mb_ord.phpt b/ext/mbstring/tests/mb_ord.phpt
index a42cb9497fa..ddf602d9ab6 100644
--- a/ext/mbstring/tests/mb_ord.phpt
+++ b/ext/mbstring/tests/mb_ord.phpt
@@ -14,41 +14,41 @@
 try {
     var_dump( mb_ord("") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 // Invalid
 try {
     var_dump( mb_ord("\u{d800}", "typo") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_ord("\u{d800}", "pass") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_ord("\u{d800}", "jis") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_ord("\u{d800}", "cp50222") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump( mb_ord("\u{d800}", "utf-7") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 mb_internal_encoding("utf-7");
 try {
     var_dump( mb_ord("\u{d800}") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -56,10 +56,10 @@
 bool(true)
 bool(true)
 bool(true)
-mb_ord(): Argument #1 ($string) must not be empty
-mb_ord(): Argument #2 ($encoding) must be a valid encoding, "typo" given
-mb_ord(): Argument #2 ($encoding) must be a valid encoding, "pass" given
-mb_ord() does not support the "JIS" encoding
-mb_ord() does not support the "CP50222" encoding
-mb_ord() does not support the "UTF-7" encoding
-mb_ord() does not support the "UTF-7" encoding
+ValueError: mb_ord(): Argument #1 ($string) must not be empty
+ValueError: mb_ord(): Argument #2 ($encoding) must be a valid encoding, "typo" given
+ValueError: mb_ord(): Argument #2 ($encoding) must be a valid encoding, "pass" given
+ValueError: mb_ord() does not support the "JIS" encoding
+ValueError: mb_ord() does not support the "CP50222" encoding
+ValueError: mb_ord() does not support the "UTF-7" encoding
+ValueError: mb_ord() does not support the "UTF-7" encoding
diff --git a/ext/mbstring/tests/mb_preferred_mime_name.phpt b/ext/mbstring/tests/mb_preferred_mime_name.phpt
index 80680ed1f84..4c76bf1d9d3 100644
--- a/ext/mbstring/tests/mb_preferred_mime_name.phpt
+++ b/ext/mbstring/tests/mb_preferred_mime_name.phpt
@@ -38,7 +38,7 @@
 try {
     var_dump(mb_preferred_mime_name('BAD_NAME'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -53,4 +53,4 @@
 UCS-2
 UCS-4
 == INVALID PARAMETER ==
-mb_preferred_mime_name(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
+ValueError: mb_preferred_mime_name(): Argument #1 ($encoding) must be a valid encoding, "BAD_NAME" given
diff --git a/ext/mbstring/tests/mb_regex_encoding_error2.phpt b/ext/mbstring/tests/mb_regex_encoding_error2.phpt
index ee665e5aa8b..ea50d11eea0 100644
--- a/ext/mbstring/tests/mb_regex_encoding_error2.phpt
+++ b/ext/mbstring/tests/mb_regex_encoding_error2.phpt
@@ -17,7 +17,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 try {
     var_dump(mb_regex_encoding('unknown'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -25,4 +25,4 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 *** Testing mb_regex_encoding() : error conditions ***

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line 9
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "unknown" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "unknown" given
diff --git a/ext/mbstring/tests/mb_regex_encoding_variation2.phpt b/ext/mbstring/tests/mb_regex_encoding_variation2.phpt
index 55d139eb3ad..3867bbd86a5 100644
--- a/ext/mbstring/tests/mb_regex_encoding_variation2.phpt
+++ b/ext/mbstring/tests/mb_regex_encoding_variation2.phpt
@@ -80,7 +80,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
     try {
         var_dump(mb_regex_encoding($enc));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     var_dump(mb_regex_encoding());
     $iterator++;
@@ -107,7 +107,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(5) "UCS-4"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-4BE" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-4BE" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(5) "UCS-4"
@@ -129,7 +129,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(7) "UCS-4LE"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-2" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-2" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(7) "UCS-4LE"
@@ -140,7 +140,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(7) "UCS-4LE"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-2BE" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-2BE" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(7) "UCS-4LE"
@@ -151,7 +151,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(7) "UCS-4LE"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-2LE" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UCS-2LE" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(7) "UCS-4LE"
@@ -228,7 +228,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(8) "UTF-16LE"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UTF-7" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UTF-7" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(8) "UTF-16LE"
@@ -239,7 +239,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(8) "UTF-16LE"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UTF7-IMAP" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UTF7-IMAP" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(8) "UTF-16LE"
@@ -316,7 +316,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(4) "SJIS"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "ISO-2022-JP" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "ISO-2022-JP" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(4) "SJIS"
@@ -327,7 +327,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(4) "SJIS"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "JIS" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "JIS" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(4) "SJIS"
@@ -481,7 +481,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte2be" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte2be" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -492,7 +492,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte2le" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte2le" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -503,7 +503,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte4be" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte4be" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -514,7 +514,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte4le" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "byte4le" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -525,7 +525,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "BASE64" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "BASE64" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -536,7 +536,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "HTML-ENTITIES" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "HTML-ENTITIES" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -547,7 +547,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "7bit" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "7bit" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -558,7 +558,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(11) "ISO-8859-15"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "8bit" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "8bit" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(11) "ISO-8859-15"
@@ -580,7 +580,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-CN"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "CP936" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "CP936" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-CN"
@@ -591,7 +591,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-CN"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "HZ" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "HZ" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-CN"
@@ -613,7 +613,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-TW"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "CP950" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "CP950" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-TW"
@@ -646,7 +646,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-KR"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UHC" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "UHC" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-KR"
@@ -657,7 +657,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-KR"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "ISO-2022-KR" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "ISO-2022-KR" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-KR"
@@ -668,7 +668,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-KR"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "Windows-1251" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "Windows-1251" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-KR"
@@ -679,7 +679,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-KR"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "Windows-1252" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "Windows-1252" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-KR"
@@ -690,7 +690,7 @@ function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not ava
 string(6) "EUC-KR"

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
-mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "CP866" given
+ValueError: mb_regex_encoding(): Argument #1 ($encoding) must be a valid encoding, "CP866" given

 Deprecated: Function mb_regex_encoding() is deprecated since 8.6, because the underlying library is no longer maintained in %s on line %d
 string(6) "EUC-KR"
diff --git a/ext/mbstring/tests/mb_send_mail_null_bytes.phpt b/ext/mbstring/tests/mb_send_mail_null_bytes.phpt
index 572a2932e36..b31afdc07da 100644
--- a/ext/mbstring/tests/mb_send_mail_null_bytes.phpt
+++ b/ext/mbstring/tests/mb_send_mail_null_bytes.phpt
@@ -8,33 +8,33 @@
 try {
     mb_send_mail("foo\0bar", "x", "y");
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     mb_send_mail("x", "foo\0bar", "y");
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     mb_send_mail("x", "y", "foo\0bar");
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     mb_send_mail("x", "y", "z", "foo\0bar");
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     mb_send_mail("x", "y", "z", "q", "foo\0bar");
 } catch (ValueError $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 ?>
 --EXPECT--
-mb_send_mail(): Argument #1 ($to) must not contain any null bytes
-mb_send_mail(): Argument #2 ($subject) must not contain any null bytes
-mb_send_mail(): Argument #3 ($message) must not contain any null bytes
-mb_send_mail(): Argument #4 ($additional_headers) must not contain any null bytes
-mb_send_mail(): Argument #5 ($additional_params) must not contain any null bytes
+ValueError: mb_send_mail(): Argument #1 ($to) must not contain any null bytes
+ValueError: mb_send_mail(): Argument #2 ($subject) must not contain any null bytes
+ValueError: mb_send_mail(): Argument #3 ($message) must not contain any null bytes
+ValueError: mb_send_mail(): Argument #4 ($additional_headers) must not contain any null bytes
+ValueError: mb_send_mail(): Argument #5 ($additional_params) must not contain any null bytes
diff --git a/ext/mbstring/tests/mb_str_split_error_conditions.phpt b/ext/mbstring/tests/mb_str_split_error_conditions.phpt
index bb307e16fa4..3bd65309ee0 100644
--- a/ext/mbstring/tests/mb_str_split_error_conditions.phpt
+++ b/ext/mbstring/tests/mb_str_split_error_conditions.phpt
@@ -11,19 +11,19 @@
 try {
     mb_str_split($string, 0);
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     mb_str_split($string, -5);
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 //Invalid Encoding
 try {
     mb_str_split($string, 1, "BAD_ENCODING");
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 // For UTF-8, error markers are not inserted
@@ -48,9 +48,9 @@

 ?>
 --EXPECT--
-mb_str_split(): Argument #2 ($length) must be greater than 0
-mb_str_split(): Argument #2 ($length) must be greater than 0
-mb_str_split(): Argument #3 ($encoding) must be a valid encoding, "BAD_ENCODING" given
+ValueError: mb_str_split(): Argument #2 ($length) must be greater than 0
+ValueError: mb_str_split(): Argument #2 ($length) must be greater than 0
+ValueError: mb_str_split(): Argument #3 ($encoding) must be a valid encoding, "BAD_ENCODING" given
 == INVALID UTF-8 ==
 [6162, 63ff, 6162, 63]
 == INVALID HZ ==
diff --git a/ext/mbstring/tests/mb_str_split_other.phpt b/ext/mbstring/tests/mb_str_split_other.phpt
index 4b0f901a903..2689fb3f316 100644
--- a/ext/mbstring/tests/mb_str_split_other.phpt
+++ b/ext/mbstring/tests/mb_str_split_other.phpt
@@ -67,7 +67,7 @@
 try {
 	mb_str_split("abc", 1234567890, "UTF-8");
 } catch (ValueError $e) {
-	echo $e->getMessage() . \PHP_EOL;
+	echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -124,4 +124,4 @@
 == Regression tests ==
 [1b28494a4a1b2842, 1b28494a4a1b2842]
 [5a]
-mb_str_split(): Argument #2 ($length) is too large
+ValueError: mb_str_split(): Argument #2 ($length) is too large
diff --git a/ext/mbstring/tests/mb_str_unknown_encoding.phpt b/ext/mbstring/tests/mb_str_unknown_encoding.phpt
index 8092c71ff7d..e96c81cc85c 100644
--- a/ext/mbstring/tests/mb_str_unknown_encoding.phpt
+++ b/ext/mbstring/tests/mb_str_unknown_encoding.phpt
@@ -11,156 +11,156 @@
 try {
     mb_chr(1, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_convert_case('coudenys', MB_CASE_UPPER, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_convert_encoding('coudenys', 'UTF-8', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_convert_kana('coudenys', 'KV', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_decode_numericentity('coudenys', [], 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_ord('coudenys', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strcut('coudenys', 0, 4, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strimwidth('coudenys', 0, 4, '', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_stripos('coudenys', 'cou', 0, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_stristr('coudenys', 'cou', false, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strlen('coudenys', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strpos('coudenys', 'cou', 0, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strrchr('coudenys', 'cou', false, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strrichr('coudenys', 'cou', false, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strripos('coudenys', 'cou', 0, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strrpos('coudenys', 'cou', 0, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strstr('coudenys', 'cou', false, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strtolower('coudenys', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strtoupper('coudenys', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_strwidth('coudenys', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_substr('coudenys', 0, null, 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     mb_substr_count('coudenys', 'c', 'UTF-0');
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_chr(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
-mb_convert_case(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
-mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "UTF-0"
-mb_convert_kana(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
-mb_decode_numericentity(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
-mb_ord(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strcut(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strimwidth(): Argument #5 ($encoding) must be a valid encoding, "UTF-0" given
-mb_stripos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_stristr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strlen(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strpos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strrchr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strrichr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strripos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strrpos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strstr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
-mb_strwidth(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
-mb_substr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
-mb_substr_count(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_chr(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_convert_case(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_convert_encoding(): Argument #3 ($from_encoding) contains invalid encoding "UTF-0"
+ValueError: mb_convert_kana(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_decode_numericentity(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_ord(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strcut(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strimwidth(): Argument #5 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_stripos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_stristr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strlen(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strpos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strrchr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strrichr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strripos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strrpos(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strstr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_strwidth(): Argument #2 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_substr(): Argument #4 ($encoding) must be a valid encoding, "UTF-0" given
+ValueError: mb_substr_count(): Argument #3 ($encoding) must be a valid encoding, "UTF-0" given
diff --git a/ext/mbstring/tests/mb_strimwidth.phpt b/ext/mbstring/tests/mb_strimwidth.phpt
index 90c073b3262..77da5d890ff 100644
--- a/ext/mbstring/tests/mb_strimwidth.phpt
+++ b/ext/mbstring/tests/mb_strimwidth.phpt
@@ -125,23 +125,23 @@ function testStrimwidth($string, $start, $width, $encoding) {
     // We also suppress the deprecation for negative width as of PHP 8.3
     var_dump(@mb_strimwidth($euc_jp, 0, -100,'...','EUC-JP'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strimwidth($euc_jp, 100, 10,'...','EUC-JP'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strimwidth($euc_jp, -100, 10,'...','EUC-JP'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     // We also suppress the deprecation for negative width as of PHP 8.3
     var_dump(@mb_strimwidth($euc_jp, -10, -21,'...','EUC-JP'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n== Other ==\n";
@@ -254,10 +254,10 @@ function testStrimwidth($string, $start, $width, $encoding) {
 start=-30 width=-25 result=[a4cf c6fc cbdc b8ec a4c7 a4b9 a1a3 45 55 43 2d 4a 50 a4f2 bbc8 a4c3 2e 2e 2e] length=19 width=29
 start=39 width=10 result=[] length=0 width=0
 start=-10 width=-12 result=[a1a3 c6fc 2e 2e 2e] length=5 width=7
-mb_strimwidth(): Argument #3 ($width) is out of range
-mb_strimwidth(): Argument #2 ($start) is out of range
-mb_strimwidth(): Argument #2 ($start) is out of range
-mb_strimwidth(): Argument #3 ($width) is out of range
+ValueError: mb_strimwidth(): Argument #3 ($width) is out of range
+ValueError: mb_strimwidth(): Argument #2 ($start) is out of range
+ValueError: mb_strimwidth(): Argument #2 ($start) is out of range
+ValueError: mb_strimwidth(): Argument #3 ($width) is out of range

 == Other ==
 start=1 width=0 result=[2e 2e 2e] length=3 width=3
diff --git a/ext/mbstring/tests/mb_stripos_empty_needle.phpt b/ext/mbstring/tests/mb_stripos_empty_needle.phpt
index b9155b2d9ee..ed5a0bb2f62 100644
--- a/ext/mbstring/tests/mb_stripos_empty_needle.phpt
+++ b/ext/mbstring/tests/mb_stripos_empty_needle.phpt
@@ -24,14 +24,14 @@
 try {
     var_dump(mb_stripos($string_ascii, '', 150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- ASCII string with out of bound negative offset --\n";
 try {
     var_dump(mb_stripos($string_ascii, '', -150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }


@@ -48,14 +48,14 @@
 try {
     var_dump(mb_stripos($string_mb, '', 150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- Multi-byte string with out of bound negative offset --\n";
 try {
     var_dump(mb_stripos($string_mb, '', -150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -70,10 +70,10 @@
 int(5)

 -- ASCII string with out of bound positive offset --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- ASCII string with out of bound negative offset --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string without offset --
 int(0)
@@ -85,7 +85,7 @@
 int(19)

 -- Multi-byte string with out of bound positive offset --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string with out of bound negative offset --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_stripos_error2.phpt b/ext/mbstring/tests/mb_stripos_error2.phpt
index 27c516df35d..832ab879cb5 100644
--- a/ext/mbstring/tests/mb_stripos_error2.phpt
+++ b/ext/mbstring/tests/mb_stripos_error2.phpt
@@ -17,10 +17,10 @@
 try {
     var_dump( mb_stripos($haystack, $needle, $offset, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_stripos() : error conditions ***
-mb_stripos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_stripos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_stripos_invalid_offset.phpt b/ext/mbstring/tests/mb_stripos_invalid_offset.phpt
index d70a38b9654..ad7b847c28d 100644
--- a/ext/mbstring/tests/mb_stripos_invalid_offset.phpt
+++ b/ext/mbstring/tests/mb_stripos_invalid_offset.phpt
@@ -21,74 +21,74 @@
 try {
     var_dump( mb_stripos($string, '日本語', 44));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump( mb_stripos($string, '日本語', 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump( mb_stripos($string, '0', 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, 3, 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, 0, 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, '日本語', -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, '0', -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, 3, -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, 0, -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_stripos($string, 0, -44));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 String len: 42
 == INVALID OFFSET ==
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
index eb8aa862a52..becc1447e07 100644
--- a/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
+++ b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt
@@ -31,13 +31,13 @@
     try {
         var_dump(mb_stripos($string_ascii, $needle_ascii, $i));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     echo "--Multibyte String --\n";
     try {
         var_dump(mb_stripos($string_mb, $needle_mb, $i, 'UTF-8'));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
 }

@@ -47,9 +47,9 @@

 **-- Offset is: -30 --**
 -- ASCII String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: -20 --**
 -- ASCII String --
@@ -83,24 +83,24 @@

 **-- Offset is: 30 --**
 -- ASCII String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 40 --**
 -- ASCII String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 50 --**
 -- ASCII String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 60 --**
 -- ASCII String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_stristr_error2.phpt b/ext/mbstring/tests/mb_stristr_error2.phpt
index 3efbe221852..d8c777d3cf3 100644
--- a/ext/mbstring/tests/mb_stristr_error2.phpt
+++ b/ext/mbstring/tests/mb_stristr_error2.phpt
@@ -16,7 +16,7 @@
 try {
     var_dump( mb_stristr($haystack, $needle, $part, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -24,4 +24,4 @@
 *** Testing mb_stristr() : error conditions ***

 -- Testing mb_stristr() with unknown encoding --
-mb_stristr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_stristr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strlen.phpt b/ext/mbstring/tests/mb_strlen.phpt
index c8279a3c8bf..550ad6ceb46 100644
--- a/ext/mbstring/tests/mb_strlen.phpt
+++ b/ext/mbstring/tests/mb_strlen.phpt
@@ -97,7 +97,7 @@
 try {
     var_dump( mb_strlen($euc_jp, 'BAD_NAME') );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -147,4 +147,4 @@
 2300
 2048
 == WRONG PARAMETERS ==
-mb_strlen(): Argument #2 ($encoding) must be a valid encoding, "BAD_NAME" given
+ValueError: mb_strlen(): Argument #2 ($encoding) must be a valid encoding, "BAD_NAME" given
diff --git a/ext/mbstring/tests/mb_strlen_error2.phpt b/ext/mbstring/tests/mb_strlen_error2.phpt
index fc680a4d46b..bf339476713 100644
--- a/ext/mbstring/tests/mb_strlen_error2.phpt
+++ b/ext/mbstring/tests/mb_strlen_error2.phpt
@@ -17,10 +17,10 @@
 try {
     var_dump(mb_strlen($string, $encoding));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_strlen() : error ***
-mb_strlen(): Argument #2 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strlen(): Argument #2 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strpos_empty_needle.phpt b/ext/mbstring/tests/mb_strpos_empty_needle.phpt
index 0cabbf80507..06015336155 100644
--- a/ext/mbstring/tests/mb_strpos_empty_needle.phpt
+++ b/ext/mbstring/tests/mb_strpos_empty_needle.phpt
@@ -24,14 +24,14 @@
 try {
     var_dump(mb_strpos($string_ascii, '', 15));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- ASCII string with out of bound negative offset --\n";
 try {
     var_dump(mb_strpos($string_ascii, '', -15));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- Multi-byte string without offset --\n";
@@ -47,14 +47,14 @@
 try {
     var_dump(mb_strpos($string_mb, '', 150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- Multi-byte string with out of bound negative offset --\n";
 try {
     var_dump(mb_strpos($string_mb, '', -150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -69,10 +69,10 @@
 int(5)

 -- ASCII string with out of bound positive offset --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- ASCII string with out of bound negative offset --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string without offset --
 int(0)
@@ -84,7 +84,7 @@
 int(19)

 -- Multi-byte string with out of bound positive offset --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string with out of bound negative offset --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strpos_error2.phpt b/ext/mbstring/tests/mb_strpos_error2.phpt
index ceabe285acf..7424e4c1b07 100644
--- a/ext/mbstring/tests/mb_strpos_error2.phpt
+++ b/ext/mbstring/tests/mb_strpos_error2.phpt
@@ -17,10 +17,10 @@
 try {
     var_dump( mb_strpos($haystack, $needle, $offset, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_strpos() : error conditions ***
-mb_strpos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strpos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strpos_invalid_offset.phpt b/ext/mbstring/tests/mb_strpos_invalid_offset.phpt
index fd5b7ba61e8..5cafe623718 100644
--- a/ext/mbstring/tests/mb_strpos_invalid_offset.phpt
+++ b/ext/mbstring/tests/mb_strpos_invalid_offset.phpt
@@ -21,74 +21,74 @@
 try {
     var_dump( mb_strpos($string, '日本語', 44));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump( mb_strpos($string, '日本語', 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump( mb_strpos($string, '0', 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, 3, 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, 0, 50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, '日本語', -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, '0', -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, 3, -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, 0, -50));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 try {
     var_dump(mb_strpos($string, 0, -44));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 String len: 42
 == INVALID OFFSET ==
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strpos_offset_errors.phpt b/ext/mbstring/tests/mb_strpos_offset_errors.phpt
index 21fd260c3d3..98667b76962 100644
--- a/ext/mbstring/tests/mb_strpos_offset_errors.phpt
+++ b/ext/mbstring/tests/mb_strpos_offset_errors.phpt
@@ -8,51 +8,51 @@
 try {
     var_dump(mb_strpos("f", "bar", 3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strpos("f", "bar", -3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strrpos("f", "bar", 3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strrpos("f", "bar", -3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_stripos("f", "bar", 3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_stripos("f", "bar", -3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strripos("f", "bar", 3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 try {
     var_dump(mb_strripos("f", "bar", -3));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_stripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strpos_variation5.phpt b/ext/mbstring/tests/mb_strpos_variation5.phpt
index bb2072aa36c..4b837277c76 100644
--- a/ext/mbstring/tests/mb_strpos_variation5.phpt
+++ b/ext/mbstring/tests/mb_strpos_variation5.phpt
@@ -30,14 +30,14 @@
     try {
         var_dump(mb_strpos($string_ascii, $needle_ascii, $i));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }

     echo "--Multibyte String --\n";
     try {
         var_dump(mb_strpos($string_mb, $needle_mb, $i, 'UTF-8'));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
 }

@@ -47,9 +47,9 @@

 **-- Offset is: -30 --**
 -- ASCII String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: -20 --**
 -- ASCII String --
@@ -83,24 +83,24 @@

 **-- Offset is: 30 --**
 -- ASCII String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 40 --**
 -- ASCII String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 50 --**
 -- ASCII String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 60 --**
 -- ASCII String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strrchr_error2.phpt b/ext/mbstring/tests/mb_strrchr_error2.phpt
index 453b319a204..a9cef8acf82 100644
--- a/ext/mbstring/tests/mb_strrchr_error2.phpt
+++ b/ext/mbstring/tests/mb_strrchr_error2.phpt
@@ -16,7 +16,7 @@
 try {
     var_dump( mb_strrchr($haystack, $needle, $part, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -24,4 +24,4 @@
 *** Testing mb_strrchr() : error conditions ***

 -- Testing mb_strrchr() with unknown encoding --
-mb_strrchr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strrchr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strrichr_error2.phpt b/ext/mbstring/tests/mb_strrichr_error2.phpt
index a0caa222bb9..a699e0789b0 100644
--- a/ext/mbstring/tests/mb_strrichr_error2.phpt
+++ b/ext/mbstring/tests/mb_strrichr_error2.phpt
@@ -16,7 +16,7 @@
 try {
     var_dump( mb_strrichr($haystack, $needle, $part, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -24,4 +24,4 @@
 *** Testing mb_strrichr() : error conditions ***

 -- Testing mb_strrichr() with unknown encoding --
-mb_strrichr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strrichr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strripos_empty_needle.phpt b/ext/mbstring/tests/mb_strripos_empty_needle.phpt
index 96de7ca6b20..4e3b38bf021 100644
--- a/ext/mbstring/tests/mb_strripos_empty_needle.phpt
+++ b/ext/mbstring/tests/mb_strripos_empty_needle.phpt
@@ -24,14 +24,14 @@
 try {
     var_dump(mb_strripos($string_ascii, '', 15));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- ASCII string with out of bound negative offset --\n";
 try {
     var_dump(mb_strripos($string_ascii, '', -15));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }


@@ -48,14 +48,14 @@
 try {
     var_dump(mb_strripos($string_mb, '', 150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- Multi-byte string with out of bound negative offset --\n";
 try {
     var_dump(mb_strripos($string_mb, '', -150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -70,10 +70,10 @@
 int(5)

 -- ASCII string with out of bound positive offset --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- ASCII string with out of bound negative offset --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string without offset --
 int(21)
@@ -85,7 +85,7 @@
 int(19)

 -- Multi-byte string with out of bound positive offset --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string with out of bound negative offset --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strripos_error2.phpt b/ext/mbstring/tests/mb_strripos_error2.phpt
index 8525a1b90bf..cd736de7cc8 100644
--- a/ext/mbstring/tests/mb_strripos_error2.phpt
+++ b/ext/mbstring/tests/mb_strripos_error2.phpt
@@ -17,10 +17,10 @@
 try {
     var_dump( mb_strripos($haystack, $needle, $offset, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_strripos() : error conditions ***
-mb_strripos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strripos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
index e8bbcff1fb3..0a0acf715b5 100644
--- a/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
+++ b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt
@@ -31,14 +31,14 @@
     try {
         var_dump(mb_strripos($string_ascii, $needle_ascii, $i));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }

     echo "--Multibyte String --\n";
     try {
         var_dump(mb_strripos($string_mb, $needle_mb, $i, 'UTF-8'));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
 }

@@ -72,24 +72,24 @@

 **-- Offset is: 30 --**
 -- ASCII String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 40 --**
 -- ASCII String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 50 --**
 -- ASCII String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 **-- Offset is: 60 --**
 -- ASCII String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
 --Multibyte String --
-mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strripos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strrpos_empty_needle.phpt b/ext/mbstring/tests/mb_strrpos_empty_needle.phpt
index 7c762d028bd..4d69b4f1295 100644
--- a/ext/mbstring/tests/mb_strrpos_empty_needle.phpt
+++ b/ext/mbstring/tests/mb_strrpos_empty_needle.phpt
@@ -24,14 +24,14 @@
 try {
     var_dump(mb_strrpos($string_ascii, '', 15));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- ASCII string with out of bound negative offset --\n";
 try {
     var_dump(mb_strrpos($string_ascii, '', -15));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }


@@ -48,14 +48,14 @@
 try {
     var_dump(mb_strrpos($string_mb, '', 150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 echo "\n-- Multi-byte string with out of bound negative offset --\n";
 try {
     var_dump(mb_strrpos($string_mb, '', -150));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -70,10 +70,10 @@
 int(5)

 -- ASCII string with out of bound positive offset --
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- ASCII string with out of bound negative offset --
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string without offset --
 int(21)
@@ -85,7 +85,7 @@
 int(19)

 -- Multi-byte string with out of bound positive offset --
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)

 -- Multi-byte string with out of bound negative offset --
-mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
+ValueError: mb_strrpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack)
diff --git a/ext/mbstring/tests/mb_strrpos_error2.phpt b/ext/mbstring/tests/mb_strrpos_error2.phpt
index 17d2927987c..836b8b7671c 100644
--- a/ext/mbstring/tests/mb_strrpos_error2.phpt
+++ b/ext/mbstring/tests/mb_strrpos_error2.phpt
@@ -18,10 +18,10 @@
 try {
     var_dump(mb_strrpos($haystack, $needle , $offset, $encoding));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_strrpos() : error conditions ***
-mb_strrpos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strrpos(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strstr_error2.phpt b/ext/mbstring/tests/mb_strstr_error2.phpt
index f798a35592a..4ba88e92973 100644
--- a/ext/mbstring/tests/mb_strstr_error2.phpt
+++ b/ext/mbstring/tests/mb_strstr_error2.phpt
@@ -16,7 +16,7 @@
 try {
     var_dump( mb_strstr($haystack, $needle, $part, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -24,4 +24,4 @@
 *** Testing mb_strstr() : error conditions ***

 -- Testing mb_strstr() with unknown encoding --
-mb_strstr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strstr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strtolower_error2.phpt b/ext/mbstring/tests/mb_strtolower_error2.phpt
index cbe4df5ca62..6b21d376752 100644
--- a/ext/mbstring/tests/mb_strtolower_error2.phpt
+++ b/ext/mbstring/tests/mb_strtolower_error2.phpt
@@ -16,10 +16,10 @@
 try {
     var_dump( mb_strtolower($sourcestring, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_strtolower() : error conditions***
-mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strtolower(): Argument #2 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_strtoupper_error2.phpt b/ext/mbstring/tests/mb_strtoupper_error2.phpt
index 75de762e4be..97aa58cef59 100644
--- a/ext/mbstring/tests/mb_strtoupper_error2.phpt
+++ b/ext/mbstring/tests/mb_strtoupper_error2.phpt
@@ -16,10 +16,10 @@
 try {
     var_dump( mb_strtoupper($sourcestring, $encoding) );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_strtoupper() : error conditions ***
-mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_strtoupper(): Argument #2 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_substitute_character.phpt b/ext/mbstring/tests/mb_substitute_character.phpt
index 2dd791cbd64..5568e34258c 100644
--- a/ext/mbstring/tests/mb_substitute_character.phpt
+++ b/ext/mbstring/tests/mb_substitute_character.phpt
@@ -26,7 +26,7 @@
 try {
     var_dump(mb_substitute_character('BAD_NAME'));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }
 ?>
 --EXPECT--
@@ -42,4 +42,4 @@
 bool(true)
 string(6) "entity"
 string(20) "262378323636303b82a0"
-mb_substitute_character(): Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint
+ValueError: mb_substitute_character(): Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint
diff --git a/ext/mbstring/tests/mb_substitute_character_basic.phpt b/ext/mbstring/tests/mb_substitute_character_basic.phpt
index 92f6c9bb814..8099abde9fc 100644
--- a/ext/mbstring/tests/mb_substitute_character_basic.phpt
+++ b/ext/mbstring/tests/mb_substitute_character_basic.phpt
@@ -21,7 +21,7 @@
 try {
     var_dump( mb_substitute_character("b") );
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -36,4 +36,4 @@
 string(4) "none"
 bool(true)
 string(4) "long"
-mb_substitute_character(): Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint
+ValueError: mb_substitute_character(): Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint
diff --git a/ext/mbstring/tests/mb_substitute_character_variation_strict_types.phpt b/ext/mbstring/tests/mb_substitute_character_variation_strict_types.phpt
index 9badcb95cf2..269e6fa7a88 100644
--- a/ext/mbstring/tests/mb_substitute_character_variation_strict_types.phpt
+++ b/ext/mbstring/tests/mb_substitute_character_variation_strict_types.phpt
@@ -100,7 +100,7 @@ class classWithoutToString
       try {
           var_dump( mb_substitute_character($value) );
       } catch (\ValueError|\TypeError $e) {
-          echo get_class($e) . ': ' . $e->getMessage() . \PHP_EOL;
+          echo $e::class, ': ', $e->getMessage(), PHP_EOL;
       }
 }

diff --git a/ext/mbstring/tests/mb_substr_count.phpt b/ext/mbstring/tests/mb_substr_count.phpt
index 872f03f92f8..4e38deb27f2 100644
--- a/ext/mbstring/tests/mb_substr_count.phpt
+++ b/ext/mbstring/tests/mb_substr_count.phpt
@@ -12,19 +12,19 @@
     try {
         var_dump(mb_substr_count("", ""));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     try {
         var_dump(mb_substr_count("��", ""));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }
     try {
         // Although the needle below contains 3 bytes, it decodes to zero Unicode codepoints
         // So the needle is actually 'empty', although it doesn't appear so
         var_dump(mb_substr_count("abcdef", "\x1B(B", "ISO-2022-JP"));
     } catch (\ValueError $e) {
-        echo $e->getMessage() . \PHP_EOL;
+        echo $e::class, ': ', $e->getMessage(), PHP_EOL;
     }

     print "== Return value for empty haystack should always be zero ==\n";
@@ -69,9 +69,9 @@
 ?>
 --EXPECT--
 == Empty needle should raise an error ==
-mb_substr_count(): Argument #2 ($needle) must not be empty
-mb_substr_count(): Argument #2 ($needle) must not be empty
-mb_substr_count(): Argument #2 ($needle) must not be empty
+ValueError: mb_substr_count(): Argument #2 ($needle) must not be empty
+ValueError: mb_substr_count(): Argument #2 ($needle) must not be empty
+ValueError: mb_substr_count(): Argument #2 ($needle) must not be empty
 == Return value for empty haystack should always be zero ==
 int(0)
 int(0)
diff --git a/ext/mbstring/tests/mb_substr_count_error2.phpt b/ext/mbstring/tests/mb_substr_count_error2.phpt
index 489319e408d..07686a70f6d 100644
--- a/ext/mbstring/tests/mb_substr_count_error2.phpt
+++ b/ext/mbstring/tests/mb_substr_count_error2.phpt
@@ -16,7 +16,7 @@
 try {
     var_dump(mb_substr_count($haystack, $needle, $encoding));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
@@ -24,4 +24,4 @@
 *** Testing mb_substr_count() : error conditions ***

 -- Testing mb_substr_count() function with an unknown encoding --
-mb_substr_count(): Argument #3 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_substr_count(): Argument #3 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_substr_error2.phpt b/ext/mbstring/tests/mb_substr_error2.phpt
index c0849a32b44..38c9a2a29f9 100644
--- a/ext/mbstring/tests/mb_substr_error2.phpt
+++ b/ext/mbstring/tests/mb_substr_error2.phpt
@@ -18,10 +18,10 @@
 try {
     var_dump( mb_substr($str, $start, $length, $encoding));
 } catch (\ValueError $e) {
-    echo $e->getMessage() . \PHP_EOL;
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

 ?>
 --EXPECT--
 *** Testing mb_substr() : error conditions ***
-mb_substr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
+ValueError: mb_substr(): Argument #4 ($encoding) must be a valid encoding, "unknown-encoding" given
diff --git a/ext/mbstring/tests/mb_trim.phpt b/ext/mbstring/tests/mb_trim.phpt
index 7133e327f82..1059c7d3d33 100644
--- a/ext/mbstring/tests/mb_trim.phpt
+++ b/ext/mbstring/tests/mb_trim.phpt
@@ -78,7 +78,7 @@
 try {
     var_dump(mb_trim( "\u{180F}", "", "NULL"));
 } catch (ValueError $e) {
-    var_dump($e->getMessage());
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 ?>
@@ -136,4 +136,4 @@
 == Same strings ==
 string(1) "f"
 == $encoding throws ValueError ==
-string(73) "mb_trim(): Argument #3 ($encoding) must be a valid encoding, "NULL" given"
+ValueError: mb_trim(): Argument #3 ($encoding) must be a valid encoding, "NULL" given