Hi Rob, >> 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. > >> >> These problems cannot be solved without significant complexity. And there is >> a possibility that it cannot be resolved in the first place. > > I very much disagree; there is very little complications in the extension. > It’s actually quite simple: > > If one value is scalar and the other an instance of GMP, for binary ops, ask > the GMP class to perform the operation. (This is a one-linish change) > > If both are GMP instances, in a binary op, ask the left-most one to perform > the op. The default GMP implementation will delegate to the right-side if the > right side isn’t a base-GMP instance, otherwise, business as usual. > > And that’s pretty much it, other than defining the base-type ops. From there, > you can implement any units library you want, with whatever behavior makes > sense — so long as the base representation is a number. > > If I remember the original operator overloading RFC, this is exactly what was > asked for by the people who voted no. In theory, it should pass if brought as > an RFC. > > — Rob
I see. All of what I wrote are problems that arise when php doesn't provide a way to control them in userland. Your proposal implicitly allows operator overloading in userland. So your proposal essentially amounts to allowing operator overloading only for GMP classes. If I understand correctly, this discussion is not centered on GMP, but on the topic of limited exposure of operator overloading functionality. I believe this is something that requires some very careful discussion. Regards, Saki