
11 月,我们将发布我们心爱的 php 8.4 版本,随之而来的是社区期待已久的新功能:属性挂钩!受到 c#、swift 和 kotlin 等其他语言的启发,这个新功能消除了神奇的 __set() 和 __get() 方法的麻烦。
我将展示一个示例,说明当前如何拥有 getter 和 setter,而无需将属性创建为私有属性并创建两个名称与属性不同的新方法。
class foo{ private string $bar; public function __set($name, $value) { $this->$name = $value . "!!!"; } public function __get($name) { return "!!!" . $this->$name; }}
使用 __get() 和 __set(),当我设置值和查找值时,我可以将 $bar 保留为公共,但具有不同的实现,并且不必创建与属性名称不同的方法。在视觉示例中,用法如下所示:
$foo = new foo();$foo->bar = "new release";// aqui o valor que ficará salvo seria "new release!!!"echo $foo->bar; // aqui retornaria "!!!new release!!!"
现在想象一下 __get() 和 __set() 与其他属性一起是什么样子,一团糟。另一种方法是创建一个 getbar() 方法和另一个 setbar() 方法,但这只考虑一个属性,用法与之前的不同:
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!!!"
我个人觉得为此用例创建新方法有点烦人,我更喜欢使用直接调用属性来获取和设置其值。这个新功能的出现是为了解决这个混乱问题,并允许您与类中的声明一起单独定义 get 和 set。
class Foo{ public String $bar { set (String $value) => $this->bar = $value . "!!!"; get => "!!! . $this->bar"; }}
这段新代码执行相同的操作,但单独执行,无需创建新方法或使用需要处理类所具有的每个属性的 __get() 和 __set()。
现在就等待这个新功能的发布吧,预计将于 11 月 21 日发布!
以上就是属性 Hooks 无 PHP的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1248390.html
微信扫一扫
支付宝扫一扫