[PHP] SplEnum은 실험적이기 때문에 Java 같은 Enum 레벨을 만들었습니다.

7353 단어 PHP
2017/10/3 보충
큰 착오가 수정되었다.
2017/10/2
다음 절차에 큰 오류가 있습니다.
부모 클래스에 정의된static 속성은 모든 하위 클래스에서 공유됩니다.
아이구, 쪽팔려.
PHP도 Enum을 원하죠.맞죠?
기대되는 SplEnum
경고
이 확장 모듈은 실험적이다.이 확장 모듈의 동작, 함수 이름 및 기타 문서에 기재된 사항은 나중에 PHP를 발표할 때 예고 없이 변경될 수 있습니다.이 모듈의 사용을 스스로 책임지세요.
아직 실험 중이야!!
어쩔 수 없이 무리하게 했다.후회 안 했어.

너 뭐 했어?


이미 같은 사건이 많았지만
PHP로 Starter Enum 설치
PHP로 Starter Enum 설치
나 혼자 이런 거 갖고 싶어.
class Day
{
    const SUNDAY = new Day('日曜日', '市場');
    const MONDAY = new Day('月曜日', '風呂');
    const TUESDAY = new Day('火曜日', '入浴');
    // ...

    public function __constuct($label, $work) { /* ... */ }
    public function getLabel() { /* ... */ }
    public function getWork() { /* ... */ }
}


Day::SUNDAY->getLabel(); // ← 日曜日
Day::SUNDAY->getWork();  // ← 市場
constnew이기 때문에 이 코드는 이동하지 않습니다.
언젠가 해냈으면 좋겠다...

대안


용례


이렇게 사용하기 편한 물건을 만들어 보았어요.const가 아니라 static 방법이 호출되었다.
Day::SUNDAY()->getLabel(); // ← 日曜日
Day::SUNDAY()->getWork();  // ← 市場
switch case에서도 사용 가능합니다.
function dayEnumTest(Day $day)
{
   switch($day) {
     case Day::MONDAY():
       echo 'Mondays are bad.';
       break;
     case Day::SATURDAY():
     case Day::SUNDAY():
       echo 'Weekends are best.';
       break;
     default:
       echo 'Midweek days are so-so.';
   }
}

Enum 설치


Enum 설치는 다음과 같습니다.
덮어쓰기 initialize 방법 내에서 Enum의 물건을 초기화하고 있습니다.
class Day extends \LAPL\Lang\PHPEnum
{
    protected static function initialize() {
        /* 第1引数が名前、第2引数がインスタンス */
        self::register('SUNDAY', new Day('日曜日', '市場'));
        self::register('MONDAY',  new Day('月曜日', 'お風呂'));
        self::register('TUESDAY', new Day('火曜日', '入浴'));
        // ...
    }
}

만든 물건


여기에 소스를 넣었어요.
https://github.com/sengokyu/php-enum
더 자세한 사용 방법은 테스트 용례를 보십시오.
https://github.com/sengokyu/php-enum/blob/master/Tests/PHPEnumTests.php

좋은 웹페이지 즐겨찾기