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