On Sat, Nov 23, 2024, at 16:02, Eugene Sidelnyk wrote:
> Hello
> 
> If I remember correctly, the whole concept of "value" is fully described in 
> DDD book by Eric Evans. If that's the point of the RFC, I wonder of there's 
> any point in not making such classes immutable by default, and to keep only 
> one instance of value object unique per given set of properties in memory, 
> thereby eliminating cloning altogether and optimizing the memory usage.
> 
> 
> On Sat, Nov 23, 2024, 3:12 PM Rob Landers <rob@bottled.codes> wrote:
>> __
>> Hello internals,
>> 
>> Born from the Records RFC (https://wiki.php.net/rfc/records) discussion, I 
>> would like to introduce to you a competing RFC: Data Classes 
>> (https://wiki.php.net/rfc/dataclass). 
>> 
>> This adds a new class modifier: data. This modifier drastically changes how 
>> classes work, making them comparable by value instead of reference, and any 
>> mutations behave more like arrays than objects (by vale). If desired, it can 
>> be combined with other modifiers, such as readonly, to enforce immutability.
>> 
>> I've been playing with this feature for a few days now, and it is 
>> surprisingly intuitive to use. There is a (mostly) working implementation 
>> available on GitHub (https://github.com/php/php-src/pull/16904) if you want 
>> to have a go at it.
>> 
>> Example:
>> 
>> data class UserId { public function __construct(public int $id) {} }
>> 
>> $user = new UserId(12);
>> // later
>> $admin = new UserId(12);
>> if ($admin === $user) { // do something } // true
>> 
>> Data classes are true value objects, with full copy-on-write optimizations:
>> 
>> data class Point {
>>   public function __construct(public int $x, public int $y) {}
>>   public function add(Point $other): Point {
>>     // illustrating value semantics, no copy yet
>>     $previous = $this;
>>     // a copy happens on the next line
>>     $this->x = $this->x + $other->x;
>>     $this->y = $this->y + $other->y;
>>     assert($this !== $previous); // passes
>>     return $this;
>>   }
>> }
>> 
>> I think this would be an amazing addition to PHP. 
>> 
>> Sincerely,
>> 
>> — Rob

Hello!

Don't forget to bottom-post!

> I wonder of there's any point in not making such classes immutable by 
> default, and to keep only one instance of value object unique per given set 
> of properties in memory, thereby eliminating cloning altogether and 
> optimizing the memory usage.

This was the entire point of the records RFC ;) it was immutable by default, 
but people were wondering what it would look like if it were more 'composable' 
vs. 'dedicated syntax'.

— Rob

Reply via email to