Hi

Am 2026-06-19 18:35, schrieb Larry Garfield:
What would those be? Personally I'd want to see operators for add and sub, at least, but I'm not sure what else would be useful.

I find the current behavior of operator overloading very unintuitive, because there is no obvious way of defining an expected signature, it's not in the stub, and if the overloaded operator throws, the stack trace will not provide any indication to what has happened either, see:

    php > var_dump(new GMP(5) + new stdClass());
PHP Warning: Uncaught TypeError: Number must be of type GMP|string|int, stdClass given in php shell code:1
    Stack trace:
    #0 {main}
      thrown in php shell code on line 1


I believe the overloaded comparison handler is a reasonable middle-ground and I wouldn't necessarily be against adding the other overloads when the entire user-story is better. But `Duration::fromSeconds(5) + 6` throwing with a `TypeError` (Duration + int is not meaningful) without being able to look up which operations are supported is not helping anyone.

7. Naming consistency ... add/sub vs. multiplyBy. Why not
addBy/sub[tract]By or multiply to be more consistent?

I concur here.

See my reply to Marc.

9. negate() I would expect to get back a negative Duration. Also, it
sounds like modifying the duration but I'm assuming a new instance gets
returned. What about inverted()?

Good point. negated() would be fine, I think. (As noted elsewhere, sort() vs sorted() is a very common pattern for "modify in place" vs. "make new", across a number of languages.)

See my reply to Marc.

Best regards
Tim Düsterhus

Reply via email to