On Sun, Nov 24, 2024, at 8:38 AM, Rowan Tommins [IMSoP] wrote:
> Hi Larry,
>
> I think that's a useful breakdown of the concepts involved. I don't 
> think it's a bad thing to have a feature that covers multiple of them - 
> common cases shouldn't need a long string of modifiers like "immutable 
> copyonwrite valueequality class Point { ... }" - but being explicit 
> about what we are and are not including is wise.
>
> There is one point I'd like to nitpick on, though:
>
>
> On 23/11/2024 20:35, Larry Garfield wrote:
>> 3. Physical equality.  This is what === does, and checks that two variables 
>> refer to the same memory location.  Physical equality implies logical 
>> equality, but not vice versa.
>
>
> PHP's === operator is not, in general, an identity operator; it is a 
> "strict equality" operator, whose exact meaning depends on the type of 
> its operands.
>
> For "scalar" types, it checks the concrete type and the value: 1+1 === 
> 2, and strtoupper('hello') === 'HELLO'
>
> For arrays, the definition is applied recursively: two arrays are 
> loosely equal if all their elements are loosely equal, and strictly 
> equal if all their elements are strictly equal.
>
> Objects are really the outlier, overloading the operator to mean 
> "identity" rather than applying a strict value comparison.
>
> Example: https://3v4l.org/udOoU
>
> If we introduce some new "value type", it seems very reasonable to use 
> the same recursive definition of strict equality used for arrays.
>
>
> -- 
> Rowan Tommins
> [IMSoP]
Valid point, thank you.  Though I'm still not convinced that value object 
equality behaving differently from normal object equality is going to be 
self-evident or intuitive.

Either way, my core point still stands: Give me a way to directly control how 
equality works per-class, like most of our sibling languages do, and we're all 
set.  Problem solved.  

--Larry Garfield

Reply via email to