"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP가 아닌 속성 후크

PHP가 아닌 속성 후크

2024-11-08에 게시됨
검색:905

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