질문을 삭제하지 말아주세요.!
 
2
1
0

다른 언어에서는 메서드 파라미터에 Enum의 static 변수 만 넘길 수 있도록 처리 할 수 있는데

PHP 에서 제공되는 SplEnum 의 경우 아래와 같이 객체를 생성해서 넘기도록 되어있습니다.

<?php
class Fruit extends SplEnum
{
  // If no value is given during object construction this value is used
  const __default = 1;
  // Our enum values
  const APPLE     = 1;
  const ORANGE    = 2;
}

$myApple   = new Fruit();
$myOrange  = new Fruit(Fruit::ORANGE);
$fail      = 1;

function eat(Fruit $aFruit)
{
  if (Fruit::APPLE == $aFruit) {
    echo "Eating an apple.\n";
  } elseif (Fruit::ORANGE == $aFruit) {
    echo "Eating an orange.\n";
  }
}

eat($myApple);  // Eating an apple.
eat($myOrange); // Eating an orange.

혹시 다른분들은 이러한 처리를 어떻게 하고 계신지 궁금합니다.

제가 일단 하고싶었던 방식은 아래와 같습니다.

<?php
class Fruit
{
  const APPLE     = 1;
  const ORANGE    = 2;
}


eat(Fruit::APPLE);

위와 같이 작성이 가능하면서 타입힌트가 가능하도록 하고 싶습니다.

    CommentAdd your comment...

    1 answer

    1.  
      2
      1
      0

      eat(Fruit::APPLE()); 안되던가요? 안된다면, SplEnum을 확장한 다른 패키지를 쓰실 것을 권장합니다.

      아래 예제 프로젝트를 참고하셔도 괜찮을 듯 합니다. 

      https://github.com/appkr/db-lock-poc/commit/4d38758fc8818f54e8898b9707f48af9d288a8a0#diff-f9e366bdcb1ffa20efb506b8a510ba69R1

      1. 권윤학

        말씀하신 구문 처럼 사용이 가능한 Enum 패키지들이 있었네요.

        예제 프로젝트에서 사용하고 있는 https://github.com/myclabs/php-enum 패키지로 해결하였습니다.

        감사합니다!!

      CommentAdd your comment...