On Sat, Apr 6, 2024 at 6:45 AM Rowan Tommins [IMSoP] <imsop....@rwec.co.uk> wrote:
> On 06/04/2024 07:24, Saki Takamachi wrote: > > Take a look at the methods shown below: > ``` > protected static function resultPropertyRules(string $propertyName, > mixed $value1, mixed $value2): mixed {} > ``` > > This method determines which operand value to use in the result after > calculation for a property that the user has defined by extending the > class. > > > While this is an intriguing idea, it only solves a narrow set of use > cases. For instance: > > - The class might want different behaviour for different operations; e.g. > Money(42, 'USD') + Money(42, 'USD') should give Money(84, 'USD'); but > Money(42, 'USD') * Money(42, 'USD') should be an error. > > - Properties might need to interact with each other; e.g. Distance(2, > 'metres') + Distance(2, 'feet') could result in Distance(2.6096, 'metres'); > but if you calculate one property at a time, you'll end up with Distance(4, > 'metres'), which is clearly wrong. > > The fundamental problem is that it ignores the OOP concept of > encapsulation: how an object stores its internal state should not define > its behaviour. Instead, the object should be able to directly define > behaviour for the operations it supports. > > If only there had been a feature that carefully considered how all those things would interact. Oh well. Okay, then please tell me in which use cases inheritance rather than > composition is the right choice? For the "Money" example, I've already > showcased how it would be broken and I can't think of any example where > inheritance would be superior to composition. > > Yes, my example is dumb, but nevertheless it showcased that the native > and unchangeable operations would be unsound for child classes with > custom properties, because the operations would not be able to correctly > fill in the custom properties. > No, like I said, I disagree, but I don't get a vote AND it's not something I would actually vote no over if I could, so it's not something I'm willing to put the effort into in that way. I was voicing my disagreement to make sure it was part of the discussion but I wasn't trying to put the effort into actually changing the design of the RFC, which I understand is a little unsatisfactory to some. As it is, this RFC will be useful to some for sure, but my library will ignore it. Jordan