On Thu, Jun 27, 2024, at 23:46, Jordan LeDoux wrote: > > > On Thu, Jun 27, 2024 at 2:35 PM Rob Landers <rob@bottled.codes> wrote: >> __ >> >> >> On Thu, Jun 27, 2024, at 06:07, Saki Takamachi wrote: >>> >>> I agree with Gina. Being able to change the class of a computed result of >>> an inherited child class causes several problems. >>> >>> The points raised in the `BCMath\Number` discussion can be summarized as >>> follows. >>> >>> - If it is possible to perform calculations on parent Class and child >>> Class, what should the resulting class be? >> >> Ask the class what it wants to be? >> >>> - Multiplying the distance class and the speed class should give you the >>> time class. >> >> That would depend on the library’s implementation. >> >>> - Similarly, multiplying two distance classes together should yield an area >>> class. >> >> See above. >> >>> - If only child classes have a property that should be specified in the >>> constructor, how do you determine the value of this property in the result >>> class? Perhaps it is possible to determine the value of the property, but >>> in that case the commutativity of the computation should be lost. >> >> This can be handled via the child class in static methods, per the library >> specifications. > > How is the library supposed to do that in the absence of operator handler > functions that can be overridden, or at least called when an operator is > encountered? > > Jordan
That’s what this email is about: adding those functions to the base GMP class as static protected methods. A time class would look something like: static protected add(GMP $left, GMP $right) { if($left instanceof self && $right instanceof self) return new self(parent::add($left, $right)); throw new LogicException('can only add time to time'); } — Rob