[원숭이 쓰기] PHP8의 유니언 types와mixed에 대한 생각

5441 단어 PHPtech
와!
드디어 PHP8이 나왔네요!
그래서 신경 쓰이는 새로운 기능인 언니언티페스와 믹스드형을 정리했다.

1. UnionTypes


PHP8 이전에는 속성, 매개변수 및 반환 값 유형에 대해서만 단일 유형을 선언할 수 있었습니다.
또 PHP 7.1 이후 버전은null 허용형이 있습니다.
PHP8 이전에는 한정된 UnionType만 만들 수 있었습니다.
겸사겸사 말씀드리지만,null로 쓸 수 있다면, 양식 앞에서 쓰시겠습니까?됐어요.例) ?stringPHP8 이전에는 PHPDoc를 사용하는 UnionType이 있었습니다.
class Test {  

 /**  
  * @var int|float  
  */  
  private $test;  

  /**  
   * @param int|float $foo
   * @return int|float  
   */  
  public function square(int $foo): int {  
    return $foo * $foo;  
  }
 }
PHP8은 이렇게 쓰여있죠!
이 경우 PHPDoc라고 써야 합니까?@param@return 타입의 PHPDoc가 필요 없고, 방법에 대한 설명만 남은 느낌인가요?
class Test {  
  private int|float $test;
  public function square(int|float $foo): int|float {  
    return $foo * $foo;  
  }
 }

void 처리


UnionType에서는 void를 사용할 수 없습니다.
따라서 다음을 지정할 수 없습니다.strign|void

null 허용형에 관하여


UnonTypes 및 null 허용형 정보?int|float처럼 쓰면 안 되고 int|float|null처럼 써야 한다.

유형 반복 정보

int|float|INT처럼 반복해서 쓰면 안 된다.

가짜


가면 유형은 UnnionTypes의 일부로 지원됩니다.
이것은 많은 내부 함수로 이루어졌지만 실패할 때는 비어 있는 것이 아니라 가짜였다.
그리고 이것은 단독으로 사용할 수 없습니다.
이에 따라 false,?false,false|null 등은 사용할 수 없다.

유니언형과 강제형


strict_types가 유효하지 않을 때, 스칼라 값은 기본 형식 변환 대상입니다.
예를 들어 bool|int"0"의 경우 false0는 기본 유형 변환의 대상이다.
형 전환의 우선 순위는 다음과 같기 때문에 우선 순위 1의 int에 대해 형 변환"0"0로 변환한다.
유형 변환 우선 순위1.int 2.float 3.string 4.bool

2.블렌드


mixed형과 이하 유니온형은 동일합니다.array|bool|callable|int|float|object|resource|string|null 처음에는 이런 유형이 있어도 선언하지 않는 것과 같다고 생각했는데, 당연히 도입한 이유도 있었다.
이유여기 기사.에 대한 상세한 설명이 있기 때문에 사용자 각도에서 의견을 총결하였다.

장점

  • mixed로 선포함으로써 모든 종류
  • 를 포함할 수 있음을 주의할 수 있습니다.
  • 모든 상황에서 유형 선언을 할 수 있기 때문에 통일감 있는 코드를 쓸 수 있다
  • 정적 분석이 쉬워졌다
  • 지정된 유형의 허들 감소
  • 팩스 시mixed를 더하면 이미 검수했음을 표시한다
  • 결점

  • 선언에 정통하지 않은 사람이 코드를 쓴 경우 Type Script의any처럼 남용될 수 있음
  • mixed형 요약


    좋은 점과 나쁜 점은 모두 있지만 개인적으로mixed를 남용하는 것은 가능성이 높다고 생각한다.따라서 적당한 진행형 선언을 전제로 믹스d를 함부로 쓰지 않는 것도 신경 쓸 필요가 있다.

    참고 문헌


    https://www.php.net/manual/ja/language.types.declarations.php#language.types.declarations.union
    https://php.watch/versions/8.0/union-types
    https://speakerdeck.com/kawanamiyuu/phpkansai-2018-lt-mixed-typehint-dis?slide=20

    좋은 웹페이지 즐겨찾기