登录
首页 >  文章 >  php教程

属性 Hooks 无 PHP

来源:dev.to

时间:2024-10-09 15:13:09 375浏览 收藏

对于一个文章开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《属性 Hooks 无 PHP》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

属性 Hooks 无 PHP

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》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>