」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 屬性 Hooks 無 PHP

屬性 Hooks 無 PHP

發佈於2024-11-08
瀏覽:695

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 日發布!

版本聲明 本文轉載於:https://dev.to/luciencorreia/property-hooks-no-php-84-2jld?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3