php8.1 업데이트와 빠른 PHPStorm의 지원.

PHPStorm 2021.2 버전이 출시되었습니다.
이번 2분기에는 PHPStorm 에서 PHP8.1에 대한 지원을 시작했더군요.
아직 정식으로 나오지 않았지만 PHP8.1에서 사용되는 재밌는 기능들이 있는지 한번 살펴보았습니다.

PHP8.1의 새로운 리턴 타입 추가.

PHP7.0부터 리턴타입을 입력하여 메소드를 만드는 방식이 추가 되었습니다.그에 따라 파라미터에도 타입을 지정하여 받을 수 있도록 만들 수 있었는데요. 자바나 C# C C++ 에서 이러한 타입형 코딩이 많이 이루어지고 있지요.

변수명과 메소드에 타입을 미리 선언하면 할수록 좋아지는것이 이 타입의 형태를 미리 지정할 수 있어서 먼저 값들을 어떻게 처리할지에 대한 예상이나 코드실수에 대한 부분을 확실하게 막을 수 있기도 합니다.

우선 PHP7.0에서 리턴타입 지정은 라이믹스 내부 코드에서도 있는데요.

    public static function isSupported(): bool
    {
        return false;
    }

이렇게 지정할 수 있습니다.
이번 PHP8.1에서 추가된 타입은 never타입입니다.

이 타입이 상당히 중복되는 항목이 있는데요 void 타입과 어찌보면 비슷해 보인다는 점이 있습니다.

void타입이란 보통 함수에서 반환하는 값이 없이 함수를 종료 또는 리턴시키는 방식을 void방식이라고 하는데 이 never타입도 비슷합니다.

다만 never타입을 지정한다면 아에 그 함수실행이 끝난다면 PHP자체를 종료시켜버립니다.

    public static function isExit(): never

이런 함수가 있다면 isExit() 함수를 실행하고 바로 exit();를 한 효과랑 같아지는 것입니다.

라이믹스에서는 never함수를 쓸 일이 없겠네요. 보통 exit할일이 없기때문에 굳이 쓰지 않을 기능같네요 ㅎㅎ (다른 타 CMS들도 비슷한것 같기도..)

readonly 멤버변수

오.. 이거 제가 진짜 기다리던 기능인데요.. readonly기능이 생겼군요.
Readonly Properties가 중요한 이유는 실수를 막거나 constructor 선언할때 굳이 const를 선언하여 선언하지 않고 내부적으로 멤버변수로써 지원되면 좋겠다 생각한 기능이거든요.

뭔가 C#에 가까워지는 것 같은게 점점 좋아지는 느낌적인 느낌이 드네요.

public readonly int $int;

다만 readonly 선언시 중요한게 실행되는 한순간에만 설정이 가능하고 __construct함수에서 첫 선언 이후 다음 선언에서 해당 값을 바꾸거나 대입할려는 움직임이 있다면 Error: Cannot modify readonly property User::$uid in ...:... 와 같은 에러가 나타나게 됩니다.

(근데 이게 더 낫다고 생각해요.)

이게 나와봐야 알겠는데 PHP에서 맴버변수에 뭔가 함수를 호출하지 못하잖아요 . 이 readonly 함수를 잘 이용한다면 상수형태로 맴버변수안에 메소드나 변수를 이용한 기능 기입이 가능할 것 같네요. 맴버변수이면서 상수Const으로 사용되어야할 부분에 변수를 혹은 클래스를 만들어 선언할 수 있는 형태가 된다면 변형이 이루어지지도 않고 해당 클래스의 readonly 맴버변수를 가져올 수 있는 형태로 얼마든지 제작이 가능할 것 같습니다.

근데 다 좋은데 제일 좋은건 static 으로 클래스 로딩 없이 바로 맴버변수 가져오도록 하고 해당 맴버변수에 함수나 메소드 이용할 수 있는게 제일 깔끔하고 좋던데 말이죠 ㅠㅠ (이를 사용할려면 무조건 클래스를 new Class으로 선언해야하는 것이 문제이죠..)

암튼 뭔가 PHP도 나름의 발전을 이루어지고 있는게 눈에 보이네요.

여러가지 변화를 시도 하는 PHP응원합니다

람보

profile
람보입니다.