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

Reply via email to