Commit 8f67c41e29d for php.net

commit 8f67c41e29d4862ba215245006a7ef68ab22bb4f
Author: NickSdot <32384907+NickSdot@users.noreply.github.com>
Date:   Sat Aug 22 19:45:49 2026 +0700

    ext/ffi: applied fixers to improve test robustness (#23131)

diff --git a/ext/ffi/tests/003.phpt b/ext/ffi/tests/003.phpt
index d608c013d5a..fe7e9b86ff8 100644
--- a/ext/ffi/tests/003.phpt
+++ b/ext/ffi/tests/003.phpt
@@ -32,12 +32,12 @@
 try {
     var_dump($ffi->new("struct _e"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump($ffi->new("f"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 echo "ok\n";
 ?>
diff --git a/ext/ffi/tests/004.phpt b/ext/ffi/tests/004.phpt
index 6852fe19ee7..1349257e5dc 100644
--- a/ext/ffi/tests/004.phpt
+++ b/ext/ffi/tests/004.phpt
@@ -42,12 +42,12 @@ enum _g {
 try {
     var_dump($ffi->new("enum _e"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump($ffi->new("f"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 echo "ok\n";
 ?>
diff --git a/ext/ffi/tests/008.phpt b/ext/ffi/tests/008.phpt
index 9ad015eac54..480eff70e9e 100644
--- a/ext/ffi/tests/008.phpt
+++ b/ext/ffi/tests/008.phpt
@@ -20,7 +20,7 @@
 try {
     var_dump(count($a));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 try {
@@ -28,7 +28,7 @@
         echo "$key => $val\n";
     }
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/010.phpt b/ext/ffi/tests/010.phpt
index ea17aef08c5..a3275e018d1 100644
--- a/ext/ffi/tests/010.phpt
+++ b/ext/ffi/tests/010.phpt
@@ -11,4 +11,4 @@
 var_dump(FFI::string($a, FFI::sizeof($a)));
 ?>
 --EXPECT--
-string(12) "aaaaaaaaaaaa"
\ No newline at end of file
+string(12) "aaaaaaaaaaaa"
diff --git a/ext/ffi/tests/012.phpt b/ext/ffi/tests/012.phpt
index 8695b0ca017..d33940ae732 100644
--- a/ext/ffi/tests/012.phpt
+++ b/ext/ffi/tests/012.phpt
@@ -9,7 +9,7 @@
 try {
     var_dump(serialize(FFI::cdef()->new("int[2]")));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/013.phpt b/ext/ffi/tests/013.phpt
index dc8b99c1d71..2d8906b08b0 100644
--- a/ext/ffi/tests/013.phpt
+++ b/ext/ffi/tests/013.phpt
@@ -16,43 +16,43 @@
 try {
     var_dump($ffi->new("void"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 try {
     var_dump($ffi->new("void[1]"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("static int foo(int)[5];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("static int foo[5](int);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("static int foo(int)(int);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("typedef int foo[2][];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("typedef int foo[][2];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/014.phpt b/ext/ffi/tests/014.phpt
index d0f877e7a7f..98c70be33dc 100644
--- a/ext/ffi/tests/014.phpt
+++ b/ext/ffi/tests/014.phpt
@@ -17,4 +17,4 @@
 int(8)
 int(8)
 int(16)
-ok
\ No newline at end of file
+ok
diff --git a/ext/ffi/tests/015.phpt b/ext/ffi/tests/015.phpt
index de48105faa1..ccb7b699b11 100644
--- a/ext/ffi/tests/015.phpt
+++ b/ext/ffi/tests/015.phpt
@@ -10,49 +10,49 @@
     FFI::cdef("struct DIR; static struct DIR dir;");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; static struct DIR *ptr;");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; typedef struct DIR DIR; static DIR dir;");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; typedef struct DIR DIR; static DIR *ptr;");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; static struct DIR foo();");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; static struct DIR* foo();");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; static void foo(struct DIR);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct DIR; static void foo(struct DIR*);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 ok
diff --git a/ext/ffi/tests/016.phpt b/ext/ffi/tests/016.phpt
index 8a4326bb4d5..4581856e0ad 100644
--- a/ext/ffi/tests/016.phpt
+++ b/ext/ffi/tests/016.phpt
@@ -10,19 +10,19 @@
     FFI::cdef("struct X {void x();};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct X {struct X x;};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct X {struct X *ptr;};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 ok
diff --git a/ext/ffi/tests/017.phpt b/ext/ffi/tests/017.phpt
index 30f1efdde66..af268da21a1 100644
--- a/ext/ffi/tests/017.phpt
+++ b/ext/ffi/tests/017.phpt
@@ -9,17 +9,17 @@
 try {
     var_dump(FFI::new("struct X {void x();}"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(FFI::new("struct X {struct X x;}"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(FFI::new("struct X {struct X *ptr;}"));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 ok
diff --git a/ext/ffi/tests/018.phpt b/ext/ffi/tests/018.phpt
index 76ab23e08da..902cf9cdba7 100644
--- a/ext/ffi/tests/018.phpt
+++ b/ext/ffi/tests/018.phpt
@@ -10,13 +10,13 @@
     FFI::cdef("struct X {struct X x[2];};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct X {struct X *ptr[2];};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 ok
diff --git a/ext/ffi/tests/019.phpt b/ext/ffi/tests/019.phpt
index 867c10556d4..f07f7d382ee 100644
--- a/ext/ffi/tests/019.phpt
+++ b/ext/ffi/tests/019.phpt
@@ -10,13 +10,13 @@
     FFI::cdef("static int foo(int[]);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("static int foo(int bar(int));");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 ok
diff --git a/ext/ffi/tests/020.phpt b/ext/ffi/tests/020.phpt
index 37cb6b17d11..aecc3e2631c 100644
--- a/ext/ffi/tests/020.phpt
+++ b/ext/ffi/tests/020.phpt
@@ -14,7 +14,7 @@
     $p->y = 1;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $p = $ffi->new("struct {const int x; int y;}");
@@ -22,35 +22,35 @@
     $p->x = 1;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $p = $ffi->new("const struct {int x; int y;}");
     $p->x = 1;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $p = $ffi->new("const int[10]");
     $p[1] = 1;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $p = $ffi->new("const int * [1]");
     $p[0] = null;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $p = $ffi->new("int * const [1]");
     $p[0] = null;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $f = FFI::cdef("typedef int * const t[1];");
@@ -58,7 +58,7 @@
     $p[0] = null;
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 ok
diff --git a/ext/ffi/tests/023.phpt b/ext/ffi/tests/023.phpt
index 9cf77d723b0..c9d9cf1b282 100644
--- a/ext/ffi/tests/023.phpt
+++ b/ext/ffi/tests/023.phpt
@@ -11,7 +11,7 @@
     try {
         var_dump(FFI::sizeof($ffi->new("struct {}")));
     } catch (Throwable $e) {
-        echo get_class($e) . ": " . $e->getMessage() . "\n";
+        echo $e::class, ': ', $e->getMessage(), "\n";
     }
     var_dump(FFI::sizeof($ffi->new("struct {int a}")));
     var_dump(FFI::sizeof($ffi->new("struct {int a; int b}")));
diff --git a/ext/ffi/tests/027.phpt b/ext/ffi/tests/027.phpt
index b71bab4001b..31d18c06b71 100644
--- a/ext/ffi/tests/027.phpt
+++ b/ext/ffi/tests/027.phpt
@@ -12,70 +12,70 @@
     $p = $ffi->new("int[*]");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("static int (*foo)[*];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("typedef int foo[*];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("static void foo(int[*][*]);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(FFI::sizeof($ffi->new("int[0]")));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(FFI::sizeof($ffi->new("int[]")));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(FFI::sizeof($ffi->cast("int[]", $ffi->new("int[2]"))));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct _x {int a; int b[];};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $f = FFI::cdef("typedef int(*foo)[];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $f = FFI::cdef("typedef int foo[][2];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $f = FFI::cdef("typedef int foo[];");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     $f = FFI::cdef("static int foo(int[]);");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/028.phpt b/ext/ffi/tests/028.phpt
index 473980bcd21..13e477a3939 100644
--- a/ext/ffi/tests/028.phpt
+++ b/ext/ffi/tests/028.phpt
@@ -10,37 +10,37 @@
     FFI::cdef("struct _x {int a; int b[0];};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct _x {int a; int b[];};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct _x {int a[0]; int b;};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct _x {int a[]; int b;};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("struct _x { struct {int a; int b[];}; int c;};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     FFI::cdef("union _x {int a; int b[];};");
     echo "ok\n";
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/031.phpt b/ext/ffi/tests/031.phpt
index d4b43f8f6e6..295155c648b 100644
--- a/ext/ffi/tests/031.phpt
+++ b/ext/ffi/tests/031.phpt
@@ -13,7 +13,7 @@ function test_size($expected_size, $type) {
             echo "FAIL: sizeof($type) != $expected_size ($size)\n";
         }
     } catch (Throwable $e) {
-        echo $type . "=>" . get_class($e) . ": " . $e->getMessage()."\n";
+        echo $type, '=>', $e::class, ': ', $e->getMessage(), "\n";
     }
 }

diff --git a/ext/ffi/tests/035.phpt b/ext/ffi/tests/035.phpt
index bd8c6df71f9..01ccc1eaf4c 100644
--- a/ext/ffi/tests/035.phpt
+++ b/ext/ffi/tests/035.phpt
@@ -13,7 +13,7 @@
 try {
     var_dump($p);
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECTF--
diff --git a/ext/ffi/tests/045.phpt b/ext/ffi/tests/045.phpt
index 84cecae0156..a4fec1115ae 100644
--- a/ext/ffi/tests/045.phpt
+++ b/ext/ffi/tests/045.phpt
@@ -12,12 +12,12 @@
 try {
     var_dump(FFI::isNull(null));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
     var_dump(FFI::isNull(FFI::cdef()->new("int[0]")));
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage()."\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/047.phpt b/ext/ffi/tests/047.phpt
index e09da3fe9ee..48af033eb29 100644
--- a/ext/ffi/tests/047.phpt
+++ b/ext/ffi/tests/047.phpt
@@ -15,7 +15,7 @@
 	$x->cdata = 42;
     var_dump($x);
 } catch (Throwable $e) {
-	echo $e->getMessage() . "\n";
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }

 $x = FFI::cdef()->new("struct {int cdata;}");
@@ -23,7 +23,7 @@
 	$x->cdata = 42;
     var_dump($x);
 } catch (Throwable $e) {
-	echo $e->getMessage() . "\n";
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECTF--
@@ -31,7 +31,7 @@
   ["cdata"]=>
   int(42)
 }
-Attempt to assign field 'cdata' of non C struct/union
+FFI\Exception: Attempt to assign field 'cdata' of non C struct/union
 object(FFI\CData:struct <anonymous>)#%d (1) {
   ["cdata"]=>
   int(42)
diff --git a/ext/ffi/tests/bug77706.phpt b/ext/ffi/tests/bug77706.phpt
index 704c4aec531..1cffbfac3f4 100644
--- a/ext/ffi/tests/bug77706.phpt
+++ b/ext/ffi/tests/bug77706.phpt
@@ -33,25 +33,25 @@
 try {
     $ffi->time();
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage() . "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 try {
     $ffi->time(null, null);
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage() . "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 try {
     $ffi->fprintf($ffi->stdout);
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage() . "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 try {
     $ffi->fprintf($ffi->stdout, 123, "Hello %s\n", "World");
 } catch (Throwable $e) {
-    echo get_class($e) . ": " . $e->getMessage() . "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
diff --git a/ext/ffi/tests/bug78761.phpt b/ext/ffi/tests/bug78761.phpt
index fc1c6612911..41e4776aa7b 100644
--- a/ext/ffi/tests/bug78761.phpt
+++ b/ext/ffi/tests/bug78761.phpt
@@ -15,9 +15,9 @@
 <?php
 try {
     FFI::cdef()->cast('char[10]', FFI::cdef()->new('char[1]'));
-} catch (FFI\Exception $ex) {
-    echo $ex->getMessage(), PHP_EOL;
+} catch (Throwable $ex) {
+    echo $ex::class, ': ', $ex->getMessage(), "\n";
 }
 ?>
 --EXPECT--
-attempt to cast to larger type
+FFI\Exception: attempt to cast to larger type
diff --git a/ext/ffi/tests/bug78762.phpt b/ext/ffi/tests/bug78762.phpt
index 5c621d3547e..8619eaf3fc3 100644
--- a/ext/ffi/tests/bug78762.phpt
+++ b/ext/ffi/tests/bug78762.phpt
@@ -6,9 +6,9 @@
 <?php
 try {
     FFI::cdef()->cast('char[10]', FFI::cdef()->new('char[1]'));
-} catch (FFI\Exception $ex) {
-    echo $ex->getMessage(), PHP_EOL;
+} catch (Throwable $ex) {
+    echo $ex::class, ': ', $ex->getMessage(), "\n";
 }
 ?>
 --EXPECT--
-attempt to cast to larger type
+FFI\Exception: attempt to cast to larger type
diff --git a/ext/ffi/tests/bug79576.phpt b/ext/ffi/tests/bug79576.phpt
index a5dee75564c..5712701c208 100644
--- a/ext/ffi/tests/bug79576.phpt
+++ b/ext/ffi/tests/bug79576.phpt
@@ -11,12 +11,12 @@
 try {
 	FFI::cdef('struct tree *get_tree(const oid *, size_t, struct tree *);');
 } catch (Throwable $e) {
-	echo get_class($e) . ": " . $e->getMessage()."\n";
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
 	FFI::cdef('struct tree *get_tree(oid, size_t, struct tree *);');
 } catch (Throwable $e) {
-	echo get_class($e) . ": " . $e->getMessage()."\n";
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }
 try {
 	FFI::cdef('
@@ -25,7 +25,7 @@
     } simple_struct;
 ');
 } catch (Throwable $e) {
-	echo get_class($e) . ": " . $e->getMessage()."\n";
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 DONE
diff --git a/ext/ffi/tests/deprecations.phpt b/ext/ffi/tests/deprecations.phpt
index d62a214712d..2ae3a5e93f7 100644
--- a/ext/ffi/tests/deprecations.phpt
+++ b/ext/ffi/tests/deprecations.phpt
@@ -14,8 +14,8 @@
 });
 try {
     FFI::new("uint8_t[2]");
-} catch (Exception $e) {
-    echo $e->getMessage() . "\n";
+} catch (Throwable $e) {
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 set_error_handler(null);

@@ -28,8 +28,8 @@
 });
 try {
     FFI::type("uint16_t[2]");
-} catch (Exception $e) {
-    echo $e->getMessage() . "\n";
+} catch (Throwable $e) {
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 set_error_handler(null);

@@ -39,14 +39,14 @@
 });
 try {
     FFI::cast("uint8_t[2]", $p1);
-} catch (Exception $e) {
-    echo $e->getMessage() . "\n";
+} catch (Throwable $e) {
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }

 ?>
 --EXPECTF--
 Deprecated: Calling FFI::new() statically is deprecated in %s on line %d
-Calling FFI::new() statically is deprecated
+Exception: Calling FFI::new() statically is deprecated
 object(FFI\CData:uint8_t[2])#1 (2) {
   [0]=>
   int(0)
@@ -55,7 +55,7 @@
 }

 Deprecated: Calling FFI::type() statically is deprecated in %s on line %d
-Calling FFI::type() statically is deprecated
+Exception: Calling FFI::type() statically is deprecated

 Deprecated: Calling FFI::cast() statically is deprecated in %s on line %d
-Calling FFI::cast() statically is deprecated
+Exception: Calling FFI::cast() statically is deprecated
diff --git a/ext/ffi/tests/gh14286_2.phpt b/ext/ffi/tests/gh14286_2.phpt
index 4dc48ccc27a..56fb2559008 100644
--- a/ext/ffi/tests/gh14286_2.phpt
+++ b/ext/ffi/tests/gh14286_2.phpt
@@ -14,8 +14,8 @@ enum {
         } x;
     ");
 } catch (Throwable $e) {
-    echo $e->getMessage(), "\n";
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
-Failed resolving C variable 'x'
+FFI\Exception: Failed resolving C variable 'x'
diff --git a/ext/ffi/tests/gh16397.phpt b/ext/ffi/tests/gh16397.phpt
index 19ddf7ecc62..512b831a24c 100644
--- a/ext/ffi/tests/gh16397.phpt
+++ b/ext/ffi/tests/gh16397.phpt
@@ -7,9 +7,9 @@
 $ffi = FFI::cdef();
 try {
     var_dump($ffi != 1);
-} catch (FFI\Exception $e) {
-    echo $e->getMessage(), "\n";
+} catch (Throwable $e) {
+    echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
-Cannot compare FFI objects
+FFI\Exception: Cannot compare FFI objects
diff --git a/ext/ffi/tests/gh18629_cdef_resolve_func.phpt b/ext/ffi/tests/gh18629_cdef_resolve_func.phpt
index ae81412efa6..8be51dc1d38 100644
--- a/ext/ffi/tests/gh18629_cdef_resolve_func.phpt
+++ b/ext/ffi/tests/gh18629_cdef_resolve_func.phpt
@@ -8,9 +8,9 @@
 <?php
 try {
 	$ffi = FFI::cdef("void nonexistent_ffi_test_func(void);");
-} catch (\FFI\Exception $e) {
-	echo $e->getMessage() . "\n";
+} catch (\Throwable $e) {
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
-Failed resolving C function 'nonexistent_ffi_test_func'
+FFI\Exception: Failed resolving C function 'nonexistent_ffi_test_func'
diff --git a/ext/ffi/tests/gh18629_read_field_non_struct.phpt b/ext/ffi/tests/gh18629_read_field_non_struct.phpt
index 307fde1a53b..3c43c504c05 100644
--- a/ext/ffi/tests/gh18629_read_field_non_struct.phpt
+++ b/ext/ffi/tests/gh18629_read_field_non_struct.phpt
@@ -9,9 +9,9 @@
 $x = FFI::cdef()->new("int*");
 try {
 	$y = $x->foo;
-} catch (\FFI\Exception $e) {
-	echo $e->getMessage() . "\n";
+} catch (\Throwable $e) {
+	echo $e::class, ': ', $e->getMessage(), "\n";
 }
 ?>
 --EXPECT--
-Attempt to read field 'foo' of non C struct/union
+FFI\Exception: Attempt to read field 'foo' of non C struct/union
diff --git a/ext/ffi/tests/gh9698.phpt b/ext/ffi/tests/gh9698.phpt
index bab403810cd..952a096e354 100644
--- a/ext/ffi/tests/gh9698.phpt
+++ b/ext/ffi/tests/gh9698.phpt
@@ -11,11 +11,12 @@
     stream_wrapper_register('badffi', 'FFI\CData');
     file_get_contents('badffi://x');
 } catch (Throwable $exception) {
-    echo $exception->getMessage();
+    echo $exception::class, ': ', $exception->getMessage(), "\n";
 }
 ?>

 DONE
 --EXPECT--
-Attempt to assign field 'context' to uninitialized FFI\CData object
+FFI\Exception: Attempt to assign field 'context' to uninitialized FFI\CData object
+
 DONE