목차
2. 열거 내부의 방법 : 동작 추가
3. 순수한 열거 : 값이 필요하지 않을 때
4. 성냥 표현과 함께 열거를 사용합니다
5. 열렬한 사례에 대한 반복
6. 열거 및 타입 안전은 실제로
7. 경고와 한계
최종 생각
백엔드 개발 PHP 튜토리얼 PHP 8.1 열거 탐색 : 단순한 상수를 넘어서

PHP 8.1 열거 탐색 : 단순한 상수를 넘어서

Jul 28, 2025 am 04:44 AM
PHP Syntax

PHP 8.1 열거는 동작이 추가 된 유형-안전, 표현 값 세트를 활성화하여 간단한 상수를 뛰어 넘습니다. 1. Backed Enums는 케이스와 스칼라 값 (String/int)을 연결하여 () 및 tryfrom () 및 access에 대한 안전한 캐스팅을 허용합니다. 2. 열거는 isfinal () 또는 getColor ()와 같은 논리를 캡슐화하는 방법을 정의하여 깨끗한 도메인 별 코드를 촉진 할 수 있습니다. 3. 순수한 열거는 사례 신원 만 중요 할 때 사용됩니다. 깃발 또는 내부 상태에 이상적입니다. 4. 열거는 간결하고 안전한 가치 매핑을 위해 매치 표현과 완벽하게 통합됩니다. 5. CASES () 메소드는 모든 열거 인스턴스에 대한 반복을 가능하게하며 UIS 또는 검증에 유용합니다. 6. 입력 된 매개 변수로 열거를 사용하면 정확성을 강화하고 유효하지 않은 입력을 방지합니다. 7. 제한 사항에는 기본 __toString () 또는 JSON 직렬화가 포함되지만 해결 방법은 존재하지 않습니다. 궁극적으로, 열거는 도메인 규칙을 시행하고 버그를 줄이며 명확성을 향상시켜 코드 품질을 향상시켜 현대 PHP 응용 프로그램에서 문자열과 상수에 대한 우수한 대체물을 제공합니다.

PHP 8.1 열거 탐색 : 단순한 상수를 넘어서

PHP 8.1은 열거를 일류 언어 기능으로 도입하여 이전 버전 (클래스 상수 또는 문자열과 같은)에 사용되는 단순한 상수 기반 해결 방법을 넘어서 이동했습니다. 열거는 유형 안전, 더 나은자가 완성 및 고정 된 값 세트를 나타내는보다 표현적인 방법을 제공합니다. 그러나 그들의 진정한 힘은 기본 사용을 넘어서는 데 있습니다.

PHP 8.1 열거가 단순한 상수 이상의 상수 이상의 방법과 최신 응용 분야에서 효과적으로 사용하는 방법을 살펴 보겠습니다.


1. 후원 된 열거 : 스칼라 값이있는 열거

가장 실용적인 특징 중 하나는 각각의 케이스가 스칼라 값 (문자열 또는 int)과 연관 될 수 있도록하는 뒷면 열거 입니다. 이로 인해 열거는 데이터베이스 값, API 응답 또는 구성 설정에 매핑하는 데 이상적입니다.

 열거 상태 : 문자열
{
    사례 draft = '초안';
    사례 게시 = '게시';
    사례 보관 = '아카이브';
}

당신은 지금 할 수 있습니다 :

  • 스칼라 값에서 캐스트 : Status::from('draft') (유효하지 않은 경우 던져)
  • 안전하게 캐스트 : Status::tryFrom('unknown') → 예외 대신 null
  • 값을 얻으십시오 : $status->value

이것은 느슨한 문자열보다 큰 개선이며 더 안전한 데이터 처리를 가능하게합니다.


2. 열거 내부의 방법 : 동작 추가

열거는 단순한 데이터가 아니라 방법을 가질 수 있습니다. 이렇게하면 열거적 인 경우에 직접 논리를 첨부 할 수 있습니다.

 Enum Orderstatus : 문자열
{
    사례 보류 = '보류';
    사례 배송 = '선적';
    전달 된 사례 = '배달';

    공개 기능 isfinal () : bool
    {
        return $ this === self :: 배달;
    }

    공개 함수 getColor () : 문자열
    {
        반환 매치 ($ this) {
            self :: pending => '옐로우',
            self :: 선적 => 'blue',
            Self :: Delivered => 'Green',
        };
    }
}

이제 전화 할 수 있습니다.

 echo $ order-> status-> getColor (); // 예를 들어, '녹색'
if ($ order-> status-> isfinal ()) { / * ... * /}

이것은 좋은 디자인의 핵심 원리 인 관련 논리를 캡슐화합니다.


3. 순수한 열거 : 값이 필요하지 않을 때

사건의 신원에 대해서만 (근본적인 가치가 아님), 순수한 열거를 사용하십시오.

 열렬한 우선 순위
{
    케이스 낮음;
    사례 매체;
    사례 높음;
}

이들은 구성 플래그, 기능 토글 또는 이름 자체가 의미 인 내부 상태 추적에 유용합니다.


4. 성냥 표현과 함께 열거를 사용합니다

열거는 PHP의 match 표현과 아름답게 짝을 이루어 코드를 간결하고 안전하게 만듭니다.

 함수 getStatusLabel (Orderstatus $ 상태) : String
{
    반환 매치 ($ 상태) {
        Orderstatus :: Pending => '⏳ 처리를 기다리고 있습니다',
        Orderstatus :: 선적 => '? 도중에 ',
        Orderstatus :: Delivered => '✅ Delivered',
    };
}

유효하지 않은 비교의 위험이 없습니다 - 유형 시스템은 유효한 경우 만 사용되도록합니다.


5. 열렬한 사례에 대한 반복

PHP 8.1은 cases() 정적 메소드를 사용하여 모든 경우를 반복 할 수 있습니다.

 foreach (status :: case () as $ 상태) {
    echo $ 상태-> 값. "\N";
}

이것은 다음과 같습니다.

  • 형태의 건물 드롭 다운
  • 허용 값에 대한 입력 검증
  • 문서 또는 API 스키마 생성

6. 열거 및 타입 안전은 실제로

열거를 매개 변수 유형으로 사용하면 컴파일 타임에서 유효하지 않은 값을 방지합니다 (런타임 유형 확인) :

 함수 setorderstatus (Orderstatus $ 상태) : void
{
    // $ 상태는 정의 된 사례 중 하나 일 수 있습니다.
}

이것을 다음과 비교하십시오.

 함수 setorderstatus (문자열 $ 상태) //가 될 수 있습니다 *

열거 버전은 전체 클래스의 버그를 제거합니다.


7. 경고와 한계

열거는 아직 완벽하지 않습니다.

  • __toString() 과 같은 마법 방법을 직접 지원하지 않습니다
  • 열거를 확장 할 수 없습니다 (의도적 - 폐쇄 세트입니다)
  • 기본 JSON 직렬화 (아직) 없음; 수동으로 또는 라이브러리를 통해 처리해야합니다

그러나 당신은 일부를 둘러 볼 수 있습니다.

 공개 함수 __toString () : 문자열
{
    $ this-> 값을 반환합니다. // 뒷받침 된 열거 용
}

최종 생각

PHP 8.1 열거는 단순히 "이름이있는 상수"가 아닙니다. 그들은 다음을위한 강력한 도구입니다.

  • 도메인 규칙 시행
  • 유효하지 않은 상태에서 버그를 줄입니다
  • 자체 문서 작성, 표현 코드

현명하게 사용됩니다 (특히 메소드, 백업 값 및 유형 힌트) 열거는 응용 프로그램 논리의 품질과 명확성을 높일 수 있습니다.

기본적으로 : 상태, 역할 또는 유형과 같은 것들에 여전히 문자열이나 상수를 사용하고 있다면 이제 열거로 전환해야합니다.

위 내용은 PHP 8.1 열거 탐색 : 단순한 상수를 넘어서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

뜨거운 주제

PHP 8 속성 소개 : DocBlocks를 구조화 된 메타 데이터로 대체 PHP 8 속성 소개 : DocBlocks를 구조화 된 메타 데이터로 대체 Jul 25, 2025 pm 12:27 PM

php8attributesreplacedocblocksformetadatabyprovidingtype-safe, natiallysupportedannotations.1.attributesErdefinedusing#및 cantargetclasses, method, properties 등

PHP 배열 파괴 및 스프레드 연산자 마스터 링 PHP 배열 파괴 및 스프레드 연산자 마스터 링 Jul 25, 2025 am 04:44 AM

PHP의 배열 해체 및 확장 연산자는 간결한 구문을 통해 코드 가독성 및 유연성을 향상시킬 수 있습니다. 1. 배열 해체는 인덱스 및 연관 배열에서 값을 추출하는 것을 지원합니다. [, $ 3] = $ colors와 같은 빈 자리 표시자를 통해 요소를 건너 뛸 수 있습니다. 연관 배열 해체에는 [ 'name'=> $ name] = $ user와 같은 => 일치 키가 필요하며, 이는 변수 이름을 바꾸고 누락 된 키를 처리하기 위해 기본값을 설정하는 것을 지원합니다. 2. 확장 연산자 (...)는 대부분의 조합 및 연관 배열 덮어 쓰기를 지원하는 [... $ colors, 'blue']와 같은 배열을 확장하고 병합 할 수 있지만 후속 키는 전자를 덮어 쓰고 보충하지 않습니다.

PHP 구문이 쉬운가요? PHP 구문이 쉬운가요? Jul 17, 2025 am 04:12 AM

예, phpsyntaxiseasy, 특히 인력, 특히 우수한 사람들은 well을 통합하고, andrequiresminimalsetup.itssyntaxisstraightforward를 통합하고, $ forvariable, semicolonsforcstatements 및 familonsforcc and styliarc

정적 대 자기 : PHP에서 늦은 정적 바인딩을 풀기 정적 대 자기 : PHP에서 늦은 정적 바인딩을 풀기 Jul 26, 2025 am 09:50 AM

정적 메소드가 상속에서 self를 사용하여 호출되는 경우, 항상 호출 된 클래스보다는 메소드를 정의하는 클래스를 가리 킵니다. 정적은 늦은 정적 바인딩을 사용하지만 실제로 런타임에 실제로 호출 된 클래스를 올바르게 구문 분석 할 수 있습니다. 1. 자기는 코드가 위치한 클래스를 가리키는 초기 바인딩입니다. 2. 정적은 런타임 호출 클래스를 가리키며 늦은 바인딩입니다. 3. 정적을 사용하여 정적 공장 메소드를 구현하고 자동으로 서브 클래스 인스턴스를 반환합니다. 4. 정적 체인에서 상속 된 속성의 올바른 해상도를 지원합니다. 5. LSB는 상수가 아닌 정적 방법 및 속성에만 적합합니다. 6. STATIC는 상속 가능한 클래스에서 먼저 사용하여 유연성과 확장 성을 향상시켜야합니다.

PHP의 3 배, Null Coalescing 및 Nullsafe 연산자를 탈취시킵니다 PHP의 3 배, Null Coalescing 및 Nullsafe 연산자를 탈취시킵니다 Jul 25, 2025 pm 04:48 PM

theternaryoperator (? :) isusedforsimpleif-elseLogic, returnOneOftWovaluesBasedOnAcondition; 2. thenullcoalescingOperator (??) returnStheleftoperandifitispitistinnullorUndefined, OtherwisTherightOperand, AffectionpectedBbefalseffalseffalseffalseffalseffals

PHP에서 변동 기능과 인수를 이해하지 못한다 PHP에서 변동 기능과 인수를 이해하지 못한다 Jul 25, 2025 am 04:50 AM

PHP의 가변 함수 및 매개 변수 풀기 풀기는 Splat 연산자 (...)를 통해 구현됩니다. 1. 가변 함수는 ... $ params를 사용하여 여러 매개 변수를 배열로 수집하는데, 이는 매개 변수 목록의 끝에 있어야하며 필요한 매개 변수와 공존 할 수 있습니다. 2. 매개 변수 포장 풀기 사용 ... $ 배열은 배열을 독립 매개 변수로 확장하고 숫자 인덱스 어레이에 적합한 기능으로 전달합니다. 3. 래퍼 함수에서 매개 변수를 전달하는 것과 같은이 두 가지는 조합하여 사용할 수 있습니다. 4. PHP8은 연관 배열을 풀 때 이름 지정된 매개 변수를 지원하며 키 이름이 매개 변수 이름과 일치하도록해야합니다. 5. 통과 할 수없는 데이터에 대한 포장 풀기 사용을 피하고 치명적인 오류를 방지하며 매개 변수 수량의 한계에주의를 기울이십시오. 이러한 기능은 코드 유연성 및 가독성을 향상시켜 FUNC_GET_ARGS () 등을 줄입니다.

현대 PHP에서 명명 된 인수 및 생성자 속성 프로모션 활용 현대 PHP에서 명명 된 인수 및 생성자 속성 프로모션 활용 Jul 24, 2025 pm 10:28 PM

php8.0 'snamedarguments 및 prostructorPropertyProMotionImproveCodeClarityandreduceboilerPlate : 1.namedArgumentsLeTleTyoupAsSparametersByName, enipancing andlallowingFlexibleArder; 2. ConstructorPropertyPromotionAutomicalLy screatesAndAssignSproperties

PHP 익명 함수 대 화살표 기능 : 구문 깊은 다이브 PHP 익명 함수 대 화살표 기능 : 구문 깊은 다이브 Jul 25, 2025 pm 04:55 PM

화살표 기능은 단일 표현식, 간단한 콜백 및 개선 된 가독성이있는 시나리오에 적합합니다. 2. 익명 함수는 멀티 라인 로직, 복잡한 제어 흐름, 외부 변수 참조 및 수율 생성기를 사용한 시나리오에 적합합니다. 따라서 특정 요구에 따라 선택해야합니다. 간단한 시나리오는 코드 단순성을 향상시키기 위해 화살표 기능 우선 순위를 정하고 복잡한 시나리오는 익명 기능을 사용하여 완전한 기능 지원을 얻습니다.

See all articles