Re: [RFC] Time\Instant and Time\Clock

From: Date: Wed, 07 Oct 2026 10:04:14 +0000
Subject: Re: [RFC] Time\Instant and Time\Clock
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-132825@lists.php.net to get a copy of this message
Hi On 2026-09-30 21:48, Tim Düsterhus wrote:
========= Comment 5 ========= The RFC introduces a SystemClock class:
<?php

final readonly class SystemClock implements \Time\Clock
{
    public function __construct() {}

    /**
     * The current instant, at the resolution offered by the platform
     * clock,
     * which is generally coarser than nanoseconds.
     *
     * Returned values are not guaranteed to be monotonically
     * increasing across calls.
     */
    public function now(): \Time\Instant {}
}

?>
Why is SystemClock not a Singleton? Can there be multiple different system clocks in practice? I believe a System Clock, with the emphasis on "System" is a System Wide clock. This clock is not bound to PHP, but to all processes running on the system, including Apache, shell-scripts, NGINX and others.
Conceptually there is only one SystemClock and internally each SystemClock object accesses the same clock source provided by the operating system. But you are making a good point here: Replacing the constructor with a static ::get() method or similar would make that explicit and would also allow for reducing memory usage when SystemClock objects are obtained at different places in the code (instead of being pulled from a dependency injection container). I'll put this on my list to discuss with Derick (and am happy to receive naming suggestions for such a static getter).
We have now made the SystemClock a singleton with a SystemClock::get() factory / getter. The constructor is private now. Best regards Tim Düsterhus

« previous php.internals (#132825) next »