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