Commit d22965337cd for php.net

commit d22965337cd8e5ced274d6e7a2cfd07593e5efbf
Author: Tim Düsterhus <tim@bastelstu.be>
Date:   Fri Aug 7 13:59:38 2026 +0200

    date: Correctly handle `Duration::__construct()` calls (#23098)

    Co-authored-by: Nora Dossche <7771979+ndossche@users.noreply.github.com>

diff --git a/ext/date/tests/time/duration/readonly.phpt b/ext/date/tests/time/duration/readonly.phpt
index 36b407138fe..ca527fe43c5 100644
--- a/ext/date/tests/time/duration/readonly.phpt
+++ b/ext/date/tests/time/duration/readonly.phpt
@@ -89,6 +89,16 @@

 var_dump((new ReflectionProperty($d, 'seconds'))->isWritable(null, $d));

+echo "====", PHP_EOL;
+
+try {
+    (new ReflectionMethod($d, '__construct'))->invoke($d);
+} catch (Throwable $e) {
+    echo $e::class, ': ', $e->getMessage(), PHP_EOL;
+}
+
+echo f($d), PHP_EOL;
+
 ?>
 --EXPECT--
 Error: Cannot modify readonly property Time\Duration::$seconds
@@ -112,3 +122,6 @@
 Error: Cannot modify protected(set) readonly property Time\Duration::$seconds from global scope
 ====
 bool(false)
+====
+Error: Cannot directly construct Time\Duration, use Time\Duration::from*() methods instead
+         +1.000000000
diff --git a/ext/date/time_duration.c b/ext/date/time_duration.c
index d9952a829d2..14c121ff29b 100644
--- a/ext/date/time_duration.c
+++ b/ext/date/time_duration.c
@@ -146,6 +146,7 @@ ZEND_ATTRIBUTE_NODISCARD static zend_result create_duration(zval *target, zend_u

 PHP_METHOD(Time_Duration, __construct)
 {
+	zend_throw_error(NULL, "Cannot directly construct Time\\Duration, use Time\\Duration::from*() methods instead");
 }

 PHP_METHOD(Time_Duration, fromSeconds)