diff --git a/core/lib/Drupal/Core/Database/StatementEmpty.php b/core/lib/Drupal/Core/Database/StatementEmpty.php
index a87bca920a..e2df8ad876 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($class_name = NULL, $constructor_args = []) {
     return NULL;
   }
 
diff --git a/core/lib/Drupal/Core/Database/StatementInterface.php b/core/lib/Drupal/Core/Database/StatementInterface.php
index 917eb8b9bf..a777e0a3cf 100644
--- a/core/lib/Drupal/Core/Database/StatementInterface.php
+++ b/core/lib/Drupal/Core/Database/StatementInterface.php
@@ -127,6 +127,18 @@ public function fetchField($index = 0);
    *
    * The object will be of the class specified by StatementInterface::setFetchMode()
    * or stdClass if not specified.
+   *
+   * @todo These parameters are not implemented. They should be added in Drupal 10.
+   * https://www.drupal.org/node/3194677.
+   *
+   * // @param string|null $class_name
+   *   Name of the created class.
+   * // @param array $constructor_args
+   *   Elements of this array are passed to the constructor.
+   *
+   * @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..53f4ada6ba 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($class_name = NULL, $constructor_args = []) {
     if ($class_name) {
-      return $this->clientStatement->fetchObject($class_name);
+      return $this->clientStatement->fetchObject($class_name, $constructor_args);
     }
     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.');
   }
