Commit ee908f5542e for php.net

commit ee908f5542e3eeb2843440cf757a7e95a7ff1c83
Author: Gina Peter Banyard <girgias@php.net>
Date:   Fri Aug 21 13:31:45 2026 +0100

    Zend: normalise behaviour around class name ZPP specifier (#23359)

    Splitting the behavioural change of #23052 out into this and come up with something that is hopefully more sensible and consistent between fast and slow ZPP and the object or class_name Fast ZPP specifier.

diff --git a/Zend/tests/bug70914.phpt b/Zend/tests/bug70914.phpt
deleted file mode 100644
index 73a43a5600d..00000000000
--- a/Zend/tests/bug70914.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Bug #70914 zend_throw_or_error() format string vulnerability
---EXTENSIONS--
-pdo_sqlite
---FILE--
-<?php
-
-$db = new PDO('sqlite::memory:');
-$st = $db->query('SELECT 1');
-try {
-    $re = $st->fetchObject('%Z');
-} catch (TypeError $e) {
-    echo $e->getMessage(), "\n";
-}
-?>
---EXPECT--
-PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name, %Z given
diff --git a/Zend/tests/get_class_vars/get_class_vars_001.phpt b/Zend/tests/get_class_vars/get_class_vars_001.phpt
index 84f502610ec..a884409121c 100644
--- a/Zend/tests/get_class_vars/get_class_vars_001.phpt
+++ b/Zend/tests/get_class_vars/get_class_vars_001.phpt
@@ -37,4 +37,4 @@ class B extends A {
   ["aa"]=>
   int(4)
 }
-get_class_vars(): Argument #1 ($class) must be a valid class name, Unknown given
+get_class_vars(): Argument #1 ($class) must be a valid class name, "Unknown" given
diff --git a/Zend/tests/get_parent_class_basic.phpt b/Zend/tests/get_parent_class_basic.phpt
index b439fbf9fb3..8eabd64ca45 100644
--- a/Zend/tests/get_parent_class_basic.phpt
+++ b/Zend/tests/get_parent_class_basic.phpt
@@ -90,9 +90,9 @@ function test_bar() {
 string(3) "foo"
 bool(false)
 bool(false)
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
+get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, "" given
+get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, "[[[[" given
+get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, " " given
 bool(false)
 get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
 get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
diff --git a/Zend/tests/zpp/bug70914.phpt b/Zend/tests/zpp/bug70914.phpt
new file mode 100644
index 00000000000..f7f37b3b6ea
--- /dev/null
+++ b/Zend/tests/zpp/bug70914.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #70914 zend_throw_or_error() format string vulnerability
+--EXTENSIONS--
+zend_test
+--FILE--
+<?php
+
+try {
+    var_dump(zend_class_name('%Z'));
+} catch (TypeError $e) {
+    echo $e::class, ': ', $e->getMessage(), "\n";
+}
+?>
+--EXPECT--
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "%Z" given
diff --git a/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt b/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt
index bdc48e27d4a..ffb9788f1cb 100644
--- a/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt
+++ b/Zend/tests/zpp/class-string_zpp_specifier_strict_mode.phpt
@@ -57,77 +57,77 @@
 ?>
 --EXPECTF--
 Using null:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, null given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given
 NULL
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given
 NULL
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, null given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given
 NULL
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given
 NULL
 Using false:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, false given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, false given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null,  given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, false given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, false given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null,  given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given
 Using true:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, true given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, true given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, true given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, true given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given
 Using 42:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, int given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, int given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, int given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, int given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given
 Using 73.5:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, float given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, float given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, float given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, float given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given
 Using 'string':
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given
 Using '15':
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given
 Using '56.7':
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given
 Using 'stdClass':
 string(8) "stdClass"
 string(8) "stdClass"
@@ -147,46 +147,38 @@
 string(%d) "class@anonymous%s"
 string(%d) "class@anonymous%s"
 Using []:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given
 Using new stdClass():
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given
-Error: Object of class stdClass could not be converted to string
-Error: Object of class stdClass could not be converted to string
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given
-Error: Object of class stdClass could not be converted to string
-Error: Object of class stdClass could not be converted to string
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given
 Using new S():
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, S given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, S given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, S given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, S given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, S given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, S given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S given
 Using STDOUT:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given
diff --git a/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt b/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt
index 9341ecbb410..6dd0a5b046b 100644
--- a/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt
+++ b/Zend/tests/zpp/class-string_zpp_specifier_weak_mode.phpt
@@ -55,81 +55,77 @@
 ?>
 --EXPECTF--
 Using null:
-
-Deprecated: zend_class_name(): Passing null to parameter #1 ($param) of type string is deprecated in %s on line %d
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name,  given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given
 NULL
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given
 NULL
-
-Deprecated: zend_class_name(): Passing null to parameter #1 ($param) of type string is deprecated in %s on line %d
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name,  given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, null given
 NULL
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, null given
 NULL
 Using false:
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null,  given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name,  given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null,  given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, false given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, false given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, false given
 Using true:
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 1 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 1 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, true given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, true given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, true given
 Using 42:
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 42 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 42 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, int given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, int given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, int given
 Using 73.5:
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 73.5 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 73.5 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, float given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, float given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, float given
 Using 'string':
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, string given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, string given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "string" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "string" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "string" given
 Using '15':
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 15 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 15 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "15" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "15" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "15" given
 Using '56.7':
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, 56.7 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, 56.7 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "56.7" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "56.7" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "56.7" given
 Using 'stdClass':
 string(8) "stdClass"
 string(8) "stdClass"
@@ -149,46 +145,38 @@
 string(%d) "class@anonymous%s"
 string(%d) "class@anonymous%s"
 Using []:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, array given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Array given
-
-Warning: Array to string conversion in %s on line %d
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Array given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, array given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, array given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, array given
 Using new stdClass():
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given
-Error: Object of class stdClass could not be converted to string
-Error: Object of class stdClass could not be converted to string
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, stdClass given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, stdClass given
-Error: Object of class stdClass could not be converted to string
-Error: Object of class stdClass could not be converted to string
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, stdClass given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, stdClass given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, stdClass given
 Using new S():
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given
-TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, S class given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, S class given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "S class" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "S class" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "S class" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "S class" given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, "S class" given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, "S class" given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, "S class" given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, "S class" given
 Using STDOUT:
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given
-TypeError: zend_class_name(): Argument #1 ($param) must be of type string, resource given
-TypeError: zend_class_name_or_null(): Argument #1 ($param) must be of type ?string, resource given
-TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, Resource id #2 given
-TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, Resource id #2 given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given
+TypeError: zend_class_name(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null(): Argument #1 ($param) must be a valid class name or null, resource given
+TypeError: zend_class_name_slow_zpp(): Argument #1 ($param) must be a valid class name, resource given
+TypeError: zend_class_name_or_null_slow_zpp(): Argument #1 ($param) must be a valid class name or null, resource given
diff --git a/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt b/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt
index 9bdfd66ae4e..7d2cac55e3b 100644
--- a/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt
+++ b/Zend/tests/zpp/obj_or_class_name_zpp_strict_mode.phpt
@@ -41,14 +41,14 @@
 TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, float given
 TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, float given
 Using 'string':
-TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given
-TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given
+TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "string" given
+TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "string" given
 Using '15':
-TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given
-TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given
+TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "15" given
+TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "15" given
 Using '56.7':
-TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given
-TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given
+TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "56.7" given
+TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "56.7" given
 Using 'stdClass':
 string(8) "stdClass"
 string(8) "stdClass"
diff --git a/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt b/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt
index c14250a14f9..cafe821364e 100644
--- a/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt
+++ b/Zend/tests/zpp/obj_or_class_name_zpp_weak_mode.phpt
@@ -39,14 +39,14 @@
 TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, float given
 TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, float given
 Using 'string':
-TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given
-TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given
+TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "string" given
+TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "string" given
 Using '15':
-TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given
-TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given
+TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "15" given
+TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "15" given
 Using '56.7':
-TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, string given
-TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, string given
+TypeError: zend_obj_or_class_name(): Argument #1 ($param) must be an object or a valid class name, "56.7" given
+TypeError: zend_obj_or_class_name_or_null(): Argument #1 ($param) must be an object, a valid class name, or null, "56.7" given
 Using 'stdClass':
 string(8) "stdClass"
 string(8) "stdClass"
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index b5bea957106..e36ca8d1cfe 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -284,6 +284,16 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(uint32_t n
 		return;
 	}

+	if (Z_TYPE_P(arg) == IS_STRING && (
+		expected_type == Z_EXPECTED_CLASS_NAME ||
+		expected_type == Z_EXPECTED_CLASS_NAME_OR_NULL ||
+		expected_type == Z_EXPECTED_OBJECT_OR_CLASS_NAME ||
+		expected_type == Z_EXPECTED_OBJECT_OR_CLASS_NAME_OR_NULL
+	)) {
+		zend_argument_type_error(num, "must be %s, \"%s\" given", expected_error[expected_type], Z_STRVAL_P(arg));
+		return;
+	}
+
 	zend_argument_type_error(num, "must be %s, %s given", expected_error[expected_type], zend_zval_value_name(arg));
 }
 /* }}} */
@@ -492,23 +502,28 @@ ZEND_API bool ZEND_FASTCALL zend_parse_arg_class(zval *arg, zend_class_entry **p
 		*pce = NULL;
 		return 1;
 	}
-	zend_string *class_name;
-	if (!zend_parse_arg_str(arg, &class_name, check_null, num)) {
-		*pce = NULL;
-		zend_wrong_parameter_error(ZPP_ERROR_WRONG_ARG, num, NULL, check_null ? Z_EXPECTED_STRING_OR_NULL : Z_EXPECTED_STRING, arg);
-		return 0;
+	/* Only accept string and Stringable(?) as int/foat/bool are not valid class names */
+	if (UNEXPECTED(Z_TYPE_P(arg) != IS_STRING)) {
+		if (Z_TYPE_P(arg) != IS_OBJECT || !zend_parse_arg_str_slow(arg, num)) {
+			*pce = NULL;
+			zend_wrong_parameter_type_error(num, check_null ? Z_EXPECTED_CLASS_NAME_OR_NULL : Z_EXPECTED_CLASS_NAME, arg);
+			return 0;
+		}
+		/* Object was converted to string */
+		ZEND_ASSERT(Z_TYPE_P(arg) == IS_STRING);
 	}
+	zend_string *class_name = Z_STR_P(arg);

 	*pce = zend_lookup_class(class_name);
 	if (ce_base) {
 		if ((!*pce || !instanceof_function(*pce, ce_base))) {
-			zend_argument_type_error(num, "must be a class name derived from %s, %s given", ZSTR_VAL(ce_base->name), ZSTR_VAL(class_name));
+			zend_argument_type_error(num, "must be a class name derived from %s, \"%s\" given", ZSTR_VAL(ce_base->name), ZSTR_VAL(class_name));
 			*pce = NULL;
 			return 0;
 		}
 	}
 	if (!*pce) {
-		zend_argument_type_error(num, "must be a valid class name, %s given", ZSTR_VAL(class_name));
+		zend_wrong_parameter_type_error(num, check_null ? Z_EXPECTED_CLASS_NAME_OR_NULL : Z_EXPECTED_CLASS_NAME, arg);
 		return 0;
 	}
 	return 1;
@@ -1020,33 +1035,42 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec

 		case 'C':
 			{
-				zend_class_entry *lookup, **pce = va_arg(*va, zend_class_entry **);
-				zend_class_entry *ce_base = *pce;
+				zend_class_entry **pce = va_arg(*va, zend_class_entry **);
+				const zend_class_entry *ce_base = *pce;

 				if (check_null && Z_TYPE_P(arg) == IS_NULL) {
 					*pce = NULL;
 					break;
 				}
-				if (!try_convert_to_string(arg)) {
-					*pce = NULL;
-					return ""; /* try_convert_to_string() throws an exception */
-				}

-				if ((lookup = zend_lookup_class(Z_STR_P(arg))) == NULL) {
-					*pce = NULL;
-				} else {
-					*pce = lookup;
+				/* Only accept string and Stringable(?) as int/foat/bool are not valid class names */
+				if (UNEXPECTED(Z_TYPE_P(arg) != IS_STRING)) {
+					if (Z_TYPE_P(arg) != IS_OBJECT || !zend_parse_arg_str_slow(arg, arg_num)) {
+						*pce = NULL;
+						/* __toString may throw */
+						if (!EG(exception)) {
+							zend_spprintf(error, 0, "must be a valid class name%s, %s given",
+								check_null ? " or null" : "", zend_zval_value_name(arg));
+						}
+						*pce = NULL;
+						return "";
+					}
+					/* Object was converted to string */
+					ZEND_ASSERT(Z_TYPE_P(arg) == IS_STRING);
 				}
+				zend_string *class_name = Z_STR_P(arg);
+
+				*pce = zend_lookup_class(class_name);
 				if (ce_base) {
 					if ((!*pce || !instanceof_function(*pce, ce_base))) {
-						zend_spprintf(error, 0, "must be a class name derived from %s%s, %s given",
+						zend_spprintf(error, 0, "must be a class name derived from %s%s, \"%s\" given",
 							ZSTR_VAL(ce_base->name), check_null ? " or null" : "", Z_STRVAL_P(arg));
 						*pce = NULL;
 						return "";
 					}
 				}
 				if (!*pce) {
-					zend_spprintf(error, 0, "must be a valid class name%s, %s given",
+					zend_spprintf(error, 0, "must be a valid class name%s, \"%s\" given",
 						check_null ? " or null" : "", Z_STRVAL_P(arg));
 					return "";
 				}
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index f52f7aecb2b..da871e1eb39 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -1569,6 +1569,8 @@ static zend_always_inline zval *zend_try_array_init(zval *zv)
 	_(Z_EXPECTED_ARRAY_OR_STRING_OR_NULL, "of type array|string|null") \
 	_(Z_EXPECTED_STRING_OR_LONG,	"of type string|int") \
 	_(Z_EXPECTED_STRING_OR_LONG_OR_NULL, "of type string|int|null") \
+	_(Z_EXPECTED_CLASS_NAME,	"a valid class name") \
+	_(Z_EXPECTED_CLASS_NAME_OR_NULL, "a valid class name or null") \
 	_(Z_EXPECTED_OBJECT_OR_CLASS_NAME,	"an object or a valid class name") \
 	_(Z_EXPECTED_OBJECT_OR_CLASS_NAME_OR_NULL, "an object, a valid class name, or null") \
 	_(Z_EXPECTED_OBJECT_OR_STRING,	"of type object|string") \
diff --git a/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt b/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt
index 91604c5fab8..311fbd36039 100644
--- a/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt
+++ b/ext/dom/tests/modern/html/interactions/HTMLDocument_registerNodeClass_01.phpt
@@ -10,7 +10,7 @@

 ?>
 --EXPECTF--
-Fatal error: Uncaught TypeError: DOMDocument::registerNodeClass(): Argument #1 ($baseClass) must be a class name derived from DOMNode, Dom\HTMLDocument given in %s:%d
+Fatal error: Uncaught TypeError: DOMDocument::registerNodeClass(): Argument #1 ($baseClass) must be a class name derived from DOMNode, "Dom\HTMLDocument" given in %s:%d
 Stack trace:
 #0 %s(%d): DOMDocument->registerNodeClass('Dom\\HTMLDocumen...', 'DOMDocument')
 #1 {main}
diff --git a/ext/mysqli/tests/mysqli_fetch_object.phpt b/ext/mysqli/tests/mysqli_fetch_object.phpt
index 28e945db52f..8077c6ca89f 100644
--- a/ext/mysqli/tests/mysqli_fetch_object.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_object.phpt
@@ -146,5 +146,5 @@ private function __construct($a, $b) {
 NULL
 mysqli_result object is already closed
 TypeError: mysqli_fetch_object(): Argument #3 ($constructor_args) must be of type array, string given
-TypeError: mysqli_fetch_object(): Argument #2 ($class) must be a valid class name, this_class_does_not_exist given
+TypeError: mysqli_fetch_object(): Argument #2 ($class) must be a valid class name, "this_class_does_not_exist" given
 done!
diff --git a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt
index b7b2c7812a9..20dd8296d3b 100644
--- a/ext/mysqli/tests/mysqli_fetch_object_oo.phpt
+++ b/ext/mysqli/tests/mysqli_fetch_object_oo.phpt
@@ -116,12 +116,12 @@ public function __construct($a, $b) {
     require_once 'clean_table.inc';
 ?>
 --EXPECT--
-Error: Object of class mysqli could not be converted to string
+TypeError: mysqli_result::fetch_object(): Argument #1 ($class) must be a valid class name, mysqli given
 ArgumentCountError: mysqli_result::fetch_object() expects at most 2 arguments, 3 given
 TypeError: mysqli_result::fetch_object(): Argument #2 ($constructor_args) must be of type array, null given
 ArgumentCountError: Too few arguments to function mysqli_fetch_object_construct::__construct(), 1 passed and exactly 2 expected
 NULL
 NULL
 Error: mysqli_result object is already closed
-TypeError: mysqli_result::fetch_object(): Argument #1 ($class) must be a valid class name, this_class_does_not_exist given
+TypeError: mysqli_result::fetch_object(): Argument #1 ($class) must be a valid class name, "this_class_does_not_exist" given
 done!
diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt
index 0690878bac0..006e7d9306f 100644
--- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt
+++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt
@@ -117,5 +117,5 @@ public function not_a_magic_one() {
   ["null"]=>
   NULL
 }
-PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name, class_does_not_exist given
+PDOStatement::fetchObject(): Argument #1 ($class) must be a valid class name or null, "class_does_not_exist" given
 done!
diff --git a/ext/pgsql/tests/22pg_fetch_object.phpt b/ext/pgsql/tests/22pg_fetch_object.phpt
index 939a3adb350..d857295e583 100644
--- a/ext/pgsql/tests/22pg_fetch_object.phpt
+++ b/ext/pgsql/tests/22pg_fetch_object.phpt
@@ -53,5 +53,5 @@ function __construct($arg1, $arg2) {
   ["bin"]=>
   NULL
 }
-pg_fetch_object(): Argument #3 ($class) must be a valid class name, does_not_exist given
+pg_fetch_object(): Argument #3 ($class) must be a valid class name, "does_not_exist" given
 Ok
diff --git a/ext/phar/tests/phar_oo_006.phpt b/ext/phar/tests/phar_oo_006.phpt
index 627da36d5bc..c4c99a1a283 100644
--- a/ext/phar/tests/phar_oo_006.phpt
+++ b/ext/phar/tests/phar_oo_006.phpt
@@ -40,7 +40,7 @@ function __construct($what)
 __halt_compiler();
 ?>
 --EXPECTF--
-TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, SplFileInfo given
+TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, "SplFileInfo" given
 MyFile::__construct(phar://%s/a.php)
 a.php
 MyFile::__construct(phar://%s/b/c.php)
diff --git a/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt b/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt
index 78660694d53..29500a5ca67 100644
--- a/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt
+++ b/ext/spl/tests/ArrayObject/arrayObject___construct_error1.phpt
@@ -20,6 +20,6 @@
 ?>
 --EXPECT--
 Bad iterator type:
-TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, Exception given
+TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "Exception" given
 Non-existent class:
-TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClassName given
+TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "nonExistentClassName" given
diff --git a/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt
index 1eb8d17ca66..d1257ab0a6b 100644
--- a/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt
+++ b/ext/spl/tests/ArrayObject/arrayObject_setIteratorClass_error1.phpt
@@ -43,7 +43,7 @@

 ?>
 --EXPECT--
-TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given
-TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given
-TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given
-TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given
+TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, "nonExistentClass" given
+TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, "stdClass" given
+TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "nonExistentClass" given
+TypeError: ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, "stdClass" given
diff --git a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt
index 96d4e5eddef..91ffd5664c7 100644
--- a/ext/spl/tests/SplFileInfo_setFileClass_error.phpt
+++ b/ext/spl/tests/SplFileInfo_setFileClass_error.phpt
@@ -13,4 +13,4 @@

 ?>
 --EXPECT--
-TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, stdClass given
+TypeError: SplFileInfo::setFileClass(): Argument #1 ($class) must be a class name derived from SplFileObject, "stdClass" given
diff --git a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt
index 10b568bc027..d1d465a0432 100644
--- a/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt
+++ b/ext/spl/tests/SplFileInfo_setInfoClass_error.phpt
@@ -13,4 +13,4 @@

 ?>
 --EXPECT--
-TypeError: SplFileInfo::setInfoClass(): Argument #1 ($class) must be a class name derived from SplFileInfo, stdClass given
+TypeError: SplFileInfo::setInfoClass(): Argument #1 ($class) must be a class name derived from SplFileInfo, "stdClass" given
diff --git a/ext/spl/tests/bug80719.phpt b/ext/spl/tests/bug80719.phpt
index e0d7282fae3..b13ec633f67 100644
--- a/ext/spl/tests/bug80719.phpt
+++ b/ext/spl/tests/bug80719.phpt
@@ -15,5 +15,5 @@

 ?>
 --EXPECT--
-TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, FilterIterator given
+TypeError: ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, "FilterIterator" given
 int(42)
diff --git a/ext/standard/tests/class_object/get_class_methods_basic_001.phpt b/ext/standard/tests/class_object/get_class_methods_basic_001.phpt
index bee28f54422..fdfaf232ee0 100644
--- a/ext/standard/tests/class_object/get_class_methods_basic_001.phpt
+++ b/ext/standard/tests/class_object/get_class_methods_basic_001.phpt
@@ -57,5 +57,5 @@ class D {}
 array(0) {
 }
 Argument is non existent class:
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
+get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, "NonExistent" given
 Done
diff --git a/ext/standard/tests/class_object/get_class_methods_variation_001.phpt b/ext/standard/tests/class_object/get_class_methods_variation_001.phpt
deleted file mode 100644
index f7b86a2977a..00000000000
--- a/ext/standard/tests/class_object/get_class_methods_variation_001.phpt
+++ /dev/null
@@ -1,172 +0,0 @@
---TEST--
-Test get_class_methods() function : usage variations  - unexpected types
---FILE--
-<?php
-function test_error_handler($err_no, $err_msg, $filename, $linenum) {
-    echo "Error: $err_no - $err_msg\n";
-}
-set_error_handler('test_error_handler');
-
-echo "*** Testing get_class_methods() : usage variations ***\n";
-
-// Initialise function arguments not being substituted (if any)
-
-//get an unset variable
-$unset_var = 10;
-unset ($unset_var);
-
-//array of values to iterate over
-$values = array(
-
-      // int data
-      0,
-      1,
-      12345,
-      -2345,
-
-      // float data
-      10.5,
-      -10.5,
-      10.1234567e10,
-      10.7654321E-10,
-      .5,
-
-      // array data
-      array(),
-      array(0),
-      array(1),
-      array(1, 2),
-      array('color' => 'red', 'item' => 'pen'),
-
-      // null data
-      NULL,
-      null,
-
-      // boolean data
-      true,
-      false,
-      TRUE,
-      FALSE,
-
-      // empty data
-      "",
-      '',
-
-      // string data
-      "string",
-      'string',
-
-      // object data
-      new stdclass(),
-
-      // undefined data
-      $undefined_var,
-
-      // unset data
-      $unset_var,
-);
-
-// loop through each element of the array for class
-
-foreach($values as $value) {
-      echo "\nArg value " . (is_object($value) ? get_class($value) : $value) . "\n";
-      try {
-            var_dump( get_class_methods($value) );
-      } catch (TypeError $exception) {
-            echo $exception->getMessage() . "\n";
-      }
-}
-echo "Done";
-?>
---EXPECT--
-*** Testing get_class_methods() : usage variations ***
-Error: 2 - Undefined variable $undefined_var
-Error: 2 - Undefined variable $unset_var
-
-Arg value 0
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value 1
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value 12345
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value -2345
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value 10.5
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value -10.5
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value 101234567000
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value 1.07654321E-9
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value 0.5
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-
-Arg value 1
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, true given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, false given
-
-Arg value 1
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, true given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, false given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value string
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value string
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value stdClass
-array(0) {
-}
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-
-Arg value
-get_class_methods(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-Done
diff --git a/ext/standard/tests/class_object/get_parent_class_variation_002.phpt b/ext/standard/tests/class_object/get_parent_class_variation_002.phpt
deleted file mode 100644
index 8faeff9dd8d..00000000000
--- a/ext/standard/tests/class_object/get_parent_class_variation_002.phpt
+++ /dev/null
@@ -1,176 +0,0 @@
---TEST--
-Test get_parent_class() function : usage variations  - unexpected argument type.
---FILE--
-<?php
-spl_autoload_register(function ($className) {
-    echo "In autoload($className)\n";
-});
-
-function test_error_handler($err_no, $err_msg, $filename, $linenum) {
-    echo "Error: $err_no - $err_msg\n";
-}
-set_error_handler('test_error_handler');
-
-echo "*** Testing get_parent_class() : usage variations ***\n";
-
-//get an unset variable
-$unset_var = 10;
-unset ($unset_var);
-
-//array of values to iterate over
-$values = array(
-
-      // int data
-      0,
-      1,
-      12345,
-      -2345,
-
-      // float data
-      10.5,
-      -10.5,
-      10.1234567e10,
-      10.7654321E-10,
-      .5,
-
-      // array data
-      array(),
-      array(0),
-      array(1),
-      array(1, 2),
-      array('color' => 'red', 'item' => 'pen'),
-
-      // null data
-      NULL,
-      null,
-
-      // boolean data
-      true,
-      false,
-      TRUE,
-      FALSE,
-
-      // empty data
-      "",
-      '',
-
-      // string data
-      "string",
-      'String',
-
-      // object data
-      new stdclass(),
-
-      // undefined data
-      $undefined_var,
-
-      // unset data
-      $unset_var,
-);
-
-// loop through each element of the array for object
-
-foreach ($values as $value) {
-    echo "\nArg value " . (is_object($value) ? get_class($value) : $value) . "\n";
-    try {
-        var_dump(get_parent_class($value));
-    } catch (TypeError $exception) {
-        echo $exception->getMessage() . "\n";
-    }
-}
-
-echo "Done";
-?>
---EXPECT--
-*** Testing get_parent_class() : usage variations ***
-Error: 2 - Undefined variable $undefined_var
-Error: 2 - Undefined variable $unset_var
-
-Arg value 0
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value 1
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value 12345
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value -2345
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, int given
-
-Arg value 10.5
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value -10.5
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value 101234567000
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value 1.07654321E-9
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-
-Arg value 0.5
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, float given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-Error: 2 - Array to string conversion
-
-Arg value Array
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, array given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-
-Arg value 1
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, true given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, false given
-
-Arg value 1
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, true given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, false given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value string
-In autoload(string)
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value String
-In autoload(String)
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, string given
-
-Arg value stdClass
-bool(false)
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-
-Arg value
-get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, null given
-Done
diff --git a/ext/standard/tests/file/userstreams.phpt b/ext/standard/tests/file/userstreams.phpt
index d159b9612db..6ed35e1871f 100644
--- a/ext/standard/tests/file/userstreams.phpt
+++ b/ext/standard/tests/file/userstreams.phpt
@@ -319,7 +319,7 @@ function stream_seek($offset, $whence)

 ?>
 --EXPECT--
-stream_wrapper_register(): Argument #2 ($class) must be a valid class name, class_not_exist given
+stream_wrapper_register(): Argument #2 ($class) must be a valid class name, "class_not_exist" given
 Not Registered
 Registered
 Registered
diff --git a/ext/standard/tests/filters/001.phpt b/ext/standard/tests/filters/001.phpt
index 0a91b721344..6da55d2f005 100644
--- a/ext/standard/tests/filters/001.phpt
+++ b/ext/standard/tests/filters/001.phpt
@@ -14,16 +14,9 @@
     echo $e::class, ': ', $e->getMessage(), PHP_EOL;
 }

-try {
-	var_dump(stream_filter_register("------", "nonexistentclass"));
-} catch (Throwable $e) {
-    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
-}
-
 echo "Done\n";
 ?>
 --EXPECT--
 ValueError: stream_filter_register(): Argument #1 ($filter_name) must be a non-empty string
 ValueError: stream_filter_register(): Argument #2 ($class) must be a concrete class
-TypeError: stream_filter_register(): Argument #2 ($class) must be a valid class name, nonexistentclass given
 Done
diff --git a/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt b/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt
index b404d45524b..9a024deb9c1 100644
--- a/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt
+++ b/ext/standard/tests/filters/stream_filter_register_non_existing_class.phpt
@@ -16,7 +16,7 @@

 ?>
 --EXPECTF--
-TypeError: stream_filter_register(): Argument #2 ($class) must be a valid class name, not_existing given
+TypeError: stream_filter_register(): Argument #2 ($class) must be a valid class name, "not_existing" given

 Warning: stream_filter_append(): Unable to locate filter "not_existing_filter" in %s on line %d
 Hello
diff --git a/ext/xsl/tests/transformToDoc_class_exceptions.phpt b/ext/xsl/tests/transformToDoc_class_exceptions.phpt
index 566d8711baa..5cdcc2e1fb4 100644
--- a/ext/xsl/tests/transformToDoc_class_exceptions.phpt
+++ b/ext/xsl/tests/transformToDoc_class_exceptions.phpt
@@ -28,5 +28,5 @@

 ?>
 --EXPECT--
-XSLTProcessor::transformToDoc(): Argument #2 ($returnClass) must be a valid class name or null, NonExistent given
+XSLTProcessor::transformToDoc(): Argument #2 ($returnClass) must be a valid class name or null, "NonExistent" given
 XSLTProcessor::transformToDoc(): Argument #2 ($returnClass) must be a class name compatible with SimpleXMLElement, DOMDocument given