In November we will have the launch of version 8.4 of our beloved PHP and with it we will have a new feature long awaited by the community: property hooks! Inspired by other languages such as C#, Swift and Kotlin, this new feature takes the hassle out of the magical __set() and __get() methods.
I'm going to show an example of how to currently have getters and setters without having to create the property as private and create two new methods with different names than the properties.
class Foo { private String $bar; public function __set($name, $value) { $this->$name = $value . "!!!"; } public function __get($name) { return "!!!" . $this->$name; } }
Using __get() and __set() I can leave the $bar public when I set the value and when I look for the value, but with different implementation and without having to create methods with different names than the property. In a visual example the usage would look like this:
$foo = new Foo(); $foo->bar = "new release"; // aqui o valor que ficará salvo seria "new release!!!" echo $foo->bar; // aqui retornaria "!!!new release!!!"
Now imagine what __get() and __set() would look like with other properties, a total mess. Another way to do this would be to create a getBar() method and another setBar() method, but this only considers one property and the usage would be different from the previous one:
class Foo { private String $bar; public function setBar($value) { $this->bar = $value . "!!!"; } public function getBar() { return "!!!" . $this->bar; } } $foo = new Foo(); $foo->setBar('new release'); // aqui o valor que ficará salvo seria "new release!!!" echo $foo->getBar(); // aqui retornaria "!!!new release!!!"
I personally find it a bit annoying to create new methods for this use case, I much prefer to use the direct call of the property both to get and set its value. This new feature arrives to solve this mess and allow you to define get and set individually along with the declaration in the class.
class Foo { public String $bar { set (String $value) => $this->bar = $value . "!!!"; get => "!!! . $this->bar"; } }
This new code does the same thing but individually, without creating new methods or using __get() and __set() that need treatment for each property the class has.
Now just wait for the launch of this new feature, which should come out on November 21st!
The above is the detailed content of Property Hooks no PHP. For more information, please follow other related articles on the PHP Chinese website!