Developers often use methods to wrap and guard access to object properties. There are several highly common patterns for such logic, which in practice may be verbose to implement repeatedly. Alternatively, developers may use __get
and __set
to intercept reads and writes generically, but that is a sledge-hammer approach that intercepts all undefined (and some defined) properties unconditionally. Property hooks provide a more targeted, purpose-built tool for common property interactions.
class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError("Name must be non-empty"); } $this->name = $value; } } public function __construct(string $name) { $this->name = $name; } }
You can play around with them on 3v4l.org
OK
This is one of the reasons why I love C#. Would be a nice addition in PHP!
Nice to have!
We already have this kind of properties in C#!
It simplifies dedicated logic for setters/getters, without having to mess directly with __get()
and __set()
.
This would be a very interesting way to ensure values of an property.
This seems a really nice addition! Love it!
This is long overdue.
cool stuff! think it would be great way to remove validation from the constructor when implementing a value object
That would simplify our lives a lot in the day-to-day tasks like validation, data handling, transformation, etc. Paring this with Attributes can give us a lot of fire power! ;)
It could be used by ORMs like Laravel Eloquent Model that has cast and other hooks to transform data on get/set.
This would be really useful if this hooks could be added externally. So we can use attributes to add generic validation or transformation hooks.
This RFC proposes a way to have multi-line short closures — closures that don't need explicit use
statements, but can still have multiple lines and a return statement.
The "pipe operator" |>
allows you to chain multiple function calls in a more convenient way.
A new syntax for declaring the “set” operation visibility of an object property