백엔드 개발 PHP8 PHP8.1의 새로운 기능 설명 Enums 열거형

PHP8.1의 새로운 기능 설명 Enums 열거형

Nov 10, 2021 pm 03:09 PM
php8

이 기사는 번역되었습니다. 원본 주소: https://stitcher.io/blog/php-enums

PHP 8.1: Enumerations

드디어 출시되었습니다. 내장된 열거형 지원이 PHP에 추가될 예정입니다. 8.1 지원! 어떤 사람들은 오래 전에 이 일을 했어야 했다고 생각할 수도 있지만, 여러분은 내 불평을 듣지 못했습니다. 이 문서에서는 새로 추가된 기능을 자세히 살펴보겠습니다.

내 PHP 기능 게시물에서 늘 그렇듯이, 열거형의 모양에 대한 높은 수준의 개요부터 시작합니다.

enum Status
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
}
로그인 후 복사

열거형의 좋은 점은 상수 값 집합을 나타낸다는 점이지만, 가장 중요한 것은 이러한 값이 be 다음과 같이 입력하세요:

class BlogPost
{
    public function __construct(
        public Status $status, 
    ) {}
}
로그인 후 복사

이 예에서 열거형을 생성하여 aBlogPost에 전달하는 방법은 다음과 같습니다.

$post = new BlogPost(Status::DRAFT);
로그인 후 복사

기본 사항은 여기까지이며 보시다시피 전혀 복잡하지 않습니다. 추가로 작성해야 할 부분이 많지만, 열거형에 대해 좀 더 자세히 살펴보겠습니다!

#Enumeration 메서드

Enumeration은 클래스와 마찬가지로 메서드를 정의할 수 있습니다. 이는 특히 일치 연산자와 결합할 때 매우 강력한 기능입니다:

enum Status
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
    
    public function color(): string
    {
        return match($this) 
        {
            Status::DRAFT => 'grey',   
            Status::PUBLISHED => 'green',   
            Status::ARCHIVED => 'red',   
        };
    }
}
로그인 후 복사

메소드는 다음과 같이 사용할 수 있습니다:

$status = Status::ARCHIVED;
$status->color(); // 'red'
로그인 후 복사

정적 메소드도 허용됩니다:

enum Status
{
    // …
    
    public static function make(): Status
    {
        // …
    }
}
로그인 후 복사

열거형에서 self를 사용할 수도 있습니다:

enum Status
{
    // …
    
    public function color(): string
    {
        return match($this) 
        {
            self::DRAFT => 'grey',   
            self::PUBLISHED => 'green',   
            self::ARCHIVED => 'red',   
        };
    }
}
로그인 후 복사

# 열거형 인터페이스

열거형은 일반 클래스와 마찬가지로 인터페이스를 구현할 수 있습니다.

interface HasColor
{
    public function color(): string;
}
enum Status implements HasColor
{
    case DRAFT;
    case PUBLISHED;
    case ARCHIVED;
    
    public function color(): string { /* … */ }
}
로그인 후 복사

# 열거형 값 - 일명 "지원되는 열거형"

열거형 값은 내부적으로 객체로 표시되지만 값을 할당할 수 있습니다. 필요에 따라 그들에게 유용합니다. 데이터베이스에 직렬화합니다.

enum Status: string
{
    case DRAFT = 'draft';
    case PUBLISHED = 'published';
    case ARCHIVED = 'archived';
}
로그인 후 복사

열거형 정의의 유형 선언에 주의하세요. 모든 열거형 값이 해당 유형에 속함을 나타냅니다. 정수로 만들 수도 있습니다. 열거형 값으로는 int와 string만 허용됩니다.

enum Status: int
{
    case DRAFT = 1;
    case PUBLISHED = 2;
    case ARCHIVED = 3;
}
로그인 후 복사

유형 열거형에 대한 기술 용어는 더 간단한 값으로 "지원"되기 때문에 "지원 열거형"이라고 합니다. 열거형 값을 할당하기로 결정한 경우 모든 케이스에는 값이 있어야 합니다. 그것들을 혼합하고 일치시킬 수는 없습니다. "지원"이 없는 열거형을 "순수 열거형"이라고 합니다.

#인터페이스로 지원되는 열거형

인터페이스와 함께 지원되는 열거형을 사용하는 경우 열거형 유형은 열거형 이름 바로 뒤와 Implements 키워드 앞에 나타나야 합니다.

enum Status: string implements HasColor
{
    case DRAFT = 'draft';
    case PUBLISHED = 'published';
    case ARCHIVED = 'archived';
    
    // …
}
로그인 후 복사

#Serialization support enums

열거형 케이스에 값을 할당하려면 직렬화 및 역직렬화 방법이 필요할 수 있습니다. 이를 직렬화하면 열거형 값에 액세스할 수 있는 방법이 필요하다는 의미입니다. 이는 읽기 전용 공용 속성을 통해 수행됩니다:

$value = Status::PUBLISHED->value; // 2
로그인 후 복사

다음을 사용하여 값에서 열거를 복원할 수 있습니다: Enum::from

$status = Status::from(2); // Status::PUBLISHED
로그인 후 복사

알 수 없는 값이 전달되면 null을 반환하는 tryFrom도 있습니다. from을 사용하는 경우에는 예외가 있습니다.

$status = Status::from('unknown'); // ValueError
$status = Status::tryFrom('unknown'); // null
로그인 후 복사

열거에 내장된 직렬화 및 역직렬화 기능을 사용할 수도 있습니다. 또한 지원되는 열거형과 함께 json_encode를 사용할 수 있으며 결과는 열거형 값이 됩니다. 이 동작은 JsonSerialized를 구현하여 재정의할 수 있습니다.

# 열거형 값 나열 ​​

정적 메서드를 사용하여 열거형에서 사용 가능한 모든 사례 목록을 가져올 수 있습니다. Enum::cases()

Status::cases();
/* [
    Status::DRAFT, 
    Status::PUBLISHED, 
    Status::ARCHIVED
] */
로그인 후 복사

이 배열에는 실제 열거형 개체가 포함되어 있습니다.

array_map(
    fn(Status $status) => $status->color(), 
    Status::cases()
);
로그인 후 복사

#열거형은 객체입니다.

열거형 값은 객체로 표현된다고 이미 언급했는데, 실제로는 싱글톤 객체입니다. 즉, 다음과 같이 비교할 수 있습니다.

$statusA = Status::PENDING;
$statusB = Status::PENDING;
$statusC = Status::ARCHIVED;
$statusA === $statusB; // true
$statusA === $statusC; // false
$statusC instanceof Status; // true
로그인 후 복사

#Enums as array key

enum 값은 실제로 객체이므로 현재는 이를 배열 키로 사용할 수 없습니다. 다음과 같은 경우 오류가 발생합니다.

$list = [
    Status::DRAFT => 'draft',
    // …
];
로그인 후 복사

이 동작을 변경하기 위한 RFC가 있지만 아직 투표되지 않았습니다.

즉, SplObjectStorage 및 WeakMaps에서는 열거형을 키로만 사용할 수 있습니다.

#Traits

열거는 클래스와 같은 특성을 사용할 수 있지만 더 많은 제한이 있습니다. 내장 열거형 메소드를 재정의하는 것은 허용되지 않으며 클래스 속성을 포함할 수 없습니다. 열거형에서의 사용은 금지됩니다.

#Reflection 및 속성

예상대로 열거형을 처리하기 위해 ReflectionEnum, ReflectionEnumUnitCase 및 ReflectionEnumBackedCase와 같은 일부 리플렉션 클래스가 추가되었습니다. 이름에서 알 수 있는 것과 정확히 일치하는 새로운 enum_exists 함수도 있습니다.

일반 클래스 및 속성과 마찬가지로 열거형 및 해당 사례에는 속성을 사용하여 주석을 달 수 있습니다. TARGET_CLASS 필터에는 열거형도 포함됩니다.

마지막 사항: 열거형에는 읽기 전용 속성도 있습니다. RFC에서는 이것이 구현 세부 사항이며 디버깅 목적으로만 사용해야 한다고 언급합니다. 그러나 여전히 언급할 가치가 있습니다. $enum->name

위 내용은 PHP8.1의 새로운 기능 설명 Enums 열거형의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

php5와 php8의 차이점은 무엇입니까 php5와 php8의 차이점은 무엇입니까 Sep 25, 2023 pm 01:34 PM

php5와 php8의 차이점은 성능, 언어 구조, 유형 시스템, 오류 처리, 비동기 프로그래밍, 표준 라이브러리 기능 및 보안 측면에서 있습니다. 자세한 소개: 1. 성능 향상 PHP5와 비교하여 PHP8은 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 컴파일하고 최적화하여 실행 속도를 향상시킵니다. PHP8에는 몇 가지 새로운 언어 구조와 기능이 도입되었습니다. PHP8은 명명된 매개변수를 지원하므로 개발자는 매개변수 순서 대신 매개변수 이름을 전달할 수 있습니다.

php8에 mysql 확장을 추가하는 방법 php8에 mysql 확장을 추가하는 방법 Oct 07, 2023 pm 03:31 PM

php8에 mysql 확장을 추가하는 단계는 다음과 같습니다. 1. MySQL 클라이언트 라이브러리를 설치합니다. 2. PHP 8용 개발 도구를 설치합니다. 3. MySQL 확장 소스 코드를 다운로드합니다. 5. MySQL 확장을 활성화합니다. MySQL 확장; 6. 웹 서버만 다시 시작합니다.

apache2.4+php8.0의 설치 및 구성 방법에 대한 자세한 그래픽 설명 apache2.4+php8.0의 설치 및 구성 방법에 대한 자세한 그래픽 설명 Dec 06, 2022 pm 04:53 PM

이번 글에서는 apache2.4 설치 방법과 php8.0 설정 방법을 소개하겠습니다. 글에는 사진과 함께 apache2.4+php8.0 설정 방법이 자세히 나와 있습니다.

php8에서 데이터베이스에 연결하는 방법 php8에서 데이터베이스에 연결하는 방법 Nov 16, 2023 pm 02:41 PM

PHP8은 mysqli와 PDO를 사용하여 데이터베이스에 연결할 수 있습니다. 자세한 소개: 1. 연결할 데이터베이스 서버 이름, 사용자 이름, 비밀번호 및 데이터베이스 이름을 전달하여 mysqli를 사용하여 데이터베이스에 연결합니다. 그런 다음 `connect_error` 속성을 사용하여 연결 성공 여부를 확인하고 연결이 실패하면 오류 메시지를 출력합니다. 마지막으로 `close()` 메소드를 호출하여 연결을 닫습니다. 2. PDO를 사용하여 데이터베이스에 연결하고 데이터베이스 서버 이름, 비밀번호, 데이터베이스 이름 등을 전달하여 연결합니다.

php8 데이터 유형을 변환하는 방법 php8 데이터 유형을 변환하는 방법 Nov 16, 2023 pm 02:51 PM

php8 데이터 형식의 방법에는 문자열을 정수로 변환, 정수를 문자열로 변환, 문자열을 부동 소수점 수로 변환, 부동 소수점 수를 문자열로 변환, 배열을 문자열로 변환, 문자열을 배열로 변환, 부울 값을 정수로 변환, 정수를 문자열로 변환 등이 있습니다. 부울 값 및 변수 유형 결정 및 변환. 자세한 소개: 1. 문자열을 정수로 변환하는 작업에는 intval() 함수와 (int) 강제 형식 변환이 포함됩니다. 2. 정수를 문자열로 변환하는 작업에는 strval() 함수와 (문자열) 강제 형식 변환이 포함됩니다. 부동 소수점에 대한 문자열 등등.

PHP 8의 JIT에 대한 심층적인 살펴보기 PHP 8의 JIT에 대한 심층적인 살펴보기 Apr 25, 2022 pm 08:46 PM

이 기사에서는 PHP 8의 JIT를 안내하고 JIT가 해석 프로세스에 참여하는 방법에 대해 설명합니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.

php8에는 어떤 성능 향상이 있습니까? php8에는 어떤 성능 향상이 있습니까? Dec 21, 2023 pm 02:44 PM

php8의 향상된 성능에는 다음이 포함됩니다. 1. JIT 컴파일러 도입 3. 가비지 수집 메커니즘 개선 5. 새로운 언어 기능 최적화 8. 새로운 메모리 관리 메커니즘을 도입합니다. 9. 코드 생성을 최적화합니다. 자세한 소개: 1. JIT 컴파일러의 도입 PHP8은 보다 효율적인 실행을 위해 PHP 코드를 기계어 코드로 변환할 수 있는 동적 컴파일 기술인 JIT 컴파일러를 도입합니다.

php8에는 어떤 기능이 있나요? php8에는 어떤 기능이 있나요? Dec 21, 2023 pm 02:54 PM

php8의 기능: 1. 명명된 매개변수, 4. 주석, 6. 일치 표현식, 7. 향상된 유형 시스템, 10. 일관성 개선. 자세한 소개: 1. JIT 컴파일러인 PHP8은 PHP 코드를 기본 기계 코드로 컴파일하여 프로그램의 실행 속도를 향상시키는 JIT(Just-In-Time) 컴파일 기술을 도입합니다. 2. 명명된 매개변수, PHP8은 명명된 매개변수를 지원하여 다음을 사용할 수 있습니다. 함수 호출 시 매개변수 이름 등

See all articles