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 日發布!
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3