diff --git a/core/lib/Drupal/Core/Database/StatementEmpty.php b/core/lib/Drupal/Core/Database/StatementEmpty.php
index a87bca920a..490a0578cc 100644
--- a/core/lib/Drupal/Core/Database/StatementEmpty.php
+++ b/core/lib/Drupal/Core/Database/StatementEmpty.php
@@ -68,7 +68,7 @@ public function fetchField($index = 0) {
   /**
    * {@inheritdoc}
    */
-  public function fetchObject() {
+  public function fetchObject(?string $class_name = NULL, ?array $constructor_arguments = NULL) {
     return NULL;
   }
 
diff --git a/core/lib/Drupal/Core/Database/StatementInterface.php b/core/lib/Drupal/Core/Database/StatementInterface.php
index 917eb8b9bf..10a1716727 100644
--- a/core/lib/Drupal/Core/Database/StatementInterface.php
+++ b/core/lib/Drupal/Core/Database/StatementInterface.php
@@ -127,6 +127,19 @@ public function fetchField($index = 0);
    *
    * The object will be of the class specified by StatementInterface::setFetchMode()
    * or stdClass if not specified.
+   *
+   * phpcs:disable Drupal.Commenting
+   * @todo Remove PHPCS overrides https://www.drupal.org/node/3194677.
+   *
+   * @param string|null $class_name
+   *   Name of the created class.
+   * @param array $constructor_arguments
+   *   Elements of this array are passed to the constructor.
+   * phpcs:enable
+   *
+   * @return mixed
+   *   The object of specified class or \stdClass if not specified. Returns
+   *   FALSE or NULL if there is no next row.
    */
   public function fetchObject();
 
diff --git a/core/lib/Drupal/Core/Database/StatementWrapper.php b/core/lib/Drupal/Core/Database/StatementWrapper.php
index eff40102f4..a4c619a51c 100644
--- a/core/lib/Drupal/Core/Database/StatementWrapper.php
+++ b/core/lib/Drupal/Core/Database/StatementWrapper.php
@@ -190,9 +190,9 @@ public function fetchAssoc() {
   /**
    * {@inheritdoc}
    */
-  public function fetchObject(string $class_name = NULL) {
+  public function fetchObject(?string $class_name = NULL, ?array $constructor_arguments = NULL) {
     if ($class_name) {
-      return $this->clientStatement->fetchObject($class_name);
+      return $this->clientStatement->fetchObject($class_name, $constructor_arguments);
     }
     return $this->clientStatement->fetchObject();
   }
diff --git a/core/modules/system/tests/src/Functional/Database/FakeRecord.php b/core/modules/system/tests/src/Functional/Database/FakeRecord.php
index aa3a5fe35b..e14f0cf7a3 100644
--- a/core/modules/system/tests/src/Functional/Database/FakeRecord.php
+++ b/core/modules/system/tests/src/Functional/Database/FakeRecord.php
@@ -9,4 +9,23 @@
  * rather than just a stdClass or array. This class is for testing that
  * functionality. (See testQueryFetchClass() below)
  */
-class FakeRecord {}
+class FakeRecord {
+
+  /**
+   * A class variable.
+   *
+   * @var int
+   */
+  public $fakeArg;
+
+  /**
+   * Constructs a FakeRecord object with an optional constructor argument.
+   *
+   * @param int $fakeArg
+   *   A class variable.
+   */
+  public function __construct($fakeArg = 0) {
+    $this->fakeArg = $fakeArg;
+  }
+
+}
diff --git a/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php b/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php
index bd62a3317f..462a5ea214 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/FetchTest.php
@@ -88,10 +88,11 @@ public function testQueryFetchClass() {
   public function testQueryFetchObjectClass() {
     $records = 0;
     $query = $this->connection->query('SELECT [name] FROM {test} WHERE [age] = :age', [':age' => 25]);
-    while ($result = $query->fetchObject(FakeRecord::class)) {
+    while ($result = $query->fetchObject(FakeRecord::class, [1])) {
       $records += 1;
       $this->assertInstanceOf(FakeRecord::class, $result);
       $this->assertSame('John', $result->name, '25 year old is John.');
+      $this->assertSame(1, $result->fakeArg, 'The record has received an argument through its constructor.');
     }
     $this->assertSame(1, $records, 'There is only one record.');
   }
