Re: [RFC] Duration class
| From: | Nick Sdot | Date: | Wed, 01 Jul 2026 02:27:25 +0000 |
| Subject: | Re: [RFC] Duration class | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-131643@lists.php.net to get a copy of this message | ||
Hey Tim,
On 30.06.26 19:04, Tim Düsterhus wrote:
To remain consistent withThis is a new OOP API, maybe we could prioritise DX over consistency withbcdivmod(), the function should return a 2-tuple (i.e.array{0: int, 1: Duration}). This makes destructuring very convenient:[$fullDurations, $remainder] = $oneHour->divideInto($sevenMinutes);see https://news-web.php.net/php.internals/124098 for the previous discussion. I don't plan to adddivideInto()to the initial set of methods in PHP 8.6, but would be open to it if anyone feels having it right away is useful or necessary. Please speak up in that case. And please also do if you disagree with the divideBy() + divideInto() pair. Best regards Tim Düsterhus
bcdivmod()? Can we please return a value object like "DurationDivision"?
final readonly class DurationDivision
{
public int $factor; // or "quotient"
public Duration $remainder;
}
$divisionResult = $oneHour->divideInto($sevenMinutes);
$divisionResult->factor // unlike in destructuring, fully optional
$divisionResult->remainder->seconds
Although you call the destructuring very convenient, I personally think it makes a more awkward API. Would love and prefer to see an VO here!
Nits:
- while not incorrect, I find Time for the namespace not ideal. As others proposed, I'd also rather go with "Temporal".
- in the "Proposal" section example of the RFC text the readonly are redundantly on the class and properties; in the later example you only have it on the properties.
--
Cheers
Nick