首頁  >  文章  >  後端開發  >  屬性 Hooks 無 PHP

屬性 Hooks 無 PHP

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-09 06:13:29552瀏覽

Property Hooks no 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的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn