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일에 출시될 새로운 기능의 출시를 기다리세요!
위 내용은 PHP가 아닌 속성 후크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!