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 magic methods __set() and __get().
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 property.
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 names other 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 resolve 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!
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3