PHP 매 거 진 ENUM 의 실현
이 문 서 를 읽 을 때 매 거 진 기본 개념 을 알 고 있다 고 가정 하 십시오.그렇지 않 으 면 문서 의 일부 내용 에 대해 곤 혹 스 러 워 할 수도 있다.매 거 진 은 항목 마다 사 용 될 수 있 으 며,PHP 에 서 는 매 거 진 대신 상수 나 정적 변 수 를 사용 합 니 다.그러나 속성 간 에 조합 이나 관련 관계 가 존재 하 는 복잡 한 상황 에서 매 거 진 을 사용 하면 개발 과 유지 비용 을 크게 낮 출 수 있다.PHP 공식 적 으로 SPL 라 이브 러 리 를 통 해 매 거 진 클래스SplEnum를 제공 하 였 으 나,우선 확장 방식 으로 설치 해 야 하 며,그 다음 에 다시 포장 해 야 잘 사용 할 수 있 습 니 다.이 매 거 진 클래스 는 참고JAVA 매 거를 통 해 간단 하고 사용 하기 쉽 지만 기능 이 강 한 매 거 진 라 이브 러 리 를 실현 했다.
설치 하 다.
composer require phpenum/phpenum
문서.
매 거 진 을 정의 할 때 Public 또는 proctected 를 통 해 수 정 된 const 키워드 의 상수 만 매 거 진 클래스 로 인식 되 며,그 중에서 Public 는 생략 할 수 있 습 니 다.모든 매 거 진 유형 은 추상 적 인 유형 이 고 매 거 진 구조 방식 은 보 호 를 받 기 때문에 실례 화 할 수 없고 매 거 진 유형 이 제공 하 는 방법 으로 매 거 진 사례 를 얻 을 수 밖 에 없다.PHP 의 부동 소수점 형식 정밀도 에 영향 을 받 아 매 거 진 속성 이 부동 소수점 형식 값 을 포함 할 때 이 부동 소수점 형식 비 교 를 기반 으로 하거나 찾 은 결 과 를 신뢰 해 서 는 안 됩 니 다.자세 한 내용 은부동 소수점 정밀도 설명같은 매 거 진 대상 에 같은 매 거 진 상수 치 를 포함 할 때 정의 와 사용 과정 에서 접 두 사 를 사용 하여 그룹 을 나 누 어 사용 해 야 합 니 다.그렇지 않 으 면 같은 매 거 진 상수 치 를 비교 하거나 찾 은 결 과 를 신뢰 해 서 는 안 됩 니 다.
기초 매 거 는 다음 과 같은 방법 을 제공 하 였 다.
name :
value :
equals :
nameEquals :
valueEquals :
names : 【 】 , , ,
values : 【 】 , , , ,
enums : 【 】 , , , ,
hasName : 【 】 , ,
hasValue : 【 】 , ,
byName : 【 】 , ,
byValue : 【 】 , ,
count : 【 】 , ,
다음은 사용자 매 거 진 을 정의 하 는 예 를 들 어 기본 매 거 진 용법 을 소개 합 니 다.다음 사용자 매 거 진 에는 사용자 의 성별 과 상태 두 그룹의 매 거 진 상수 값 이 포함 되 어 있 으 며 각각 SEX 와 STATUS 접 두 사 를 사용 합 니 다.
/**
* @method static self SEX_MAN
* @method static self SEX_WOMAN
* @method static self STATUS_NORMAL
* @method static self STATUS_INVALID
*/
class UserEnum extends \PhpEnum\Enum
{
const SEX_MAN = 1; // 1
const SEX_WOMAN = 2; // 2
const STATUS_NORMAL = 1; // 1
const STATUS_INVALID = 9; // 9
}
아래 의 방법 을 통 해 매 거 진 대상 을 얻 을 수 있 습 니 다.매 거 진 대상 은 처음 만 든 후에 캐 시 됩 니 다.다시 임의의 방법 으로 매 거 진 대상 을 얻 을 수 있 습 니 다.첫 번 째 방식 은 효율 이 가장 높 고 추천 합 니 다.
UserEnum::SEX_MAN(); // , ,
UserEnum::byName('SEX_MAN'); // , ,
UserEnum::byValue(1,'SEX'); // , ,
UserEnum::enums('SEX')['SEX_MAN']; // , ,
목록 매 거 는 다음 과 같은 방법 을 제공 합 니 다.
ListEnum : , ,
length :【 】 ,
다음은 도시 매 거 진 을 예 로 들 어 목록 매 거 진 용법 을 소개 합 니 다.다음 도시 매 거 진 상수 길 이 는 3 이 고 성 코드,도시 코드,도시 이름 을 포함 합 니 다.
/**
* @method static self PROVINCE_LIAONING
* @method static self CITY_BEIJING
* @method static self CITY_SHENYANG
* @method static self CITY_DALIAN
*/
class CityEnum extends \PhpEnum\ListEnum
{
const PROVINCE_LIAONING = ['0', '22000', 'Liaoning'];
const CITY_BEIJING = ['110000', '110000', 'Beijing'];
const CITY_SHENYANG = ['22000', '210100', 'Shengyang'];
const CITY_DALIAN = ['22000', '210200', 'Dalian'];
private $province;
private $city;
private $name;
protected final function ListEnum($list)
{
list($this->province, $this->city, $this->name) = $list;
}
public final static function length()
{
return 3;
}
public function getProvince()
{
return $this->province;
}
public function getCity()
{
return $this->city;
}
public function getName()
{
return $this->name;
}
}
도시 매 거 속성 값 가 져 오기
CityEnum::PROVINCE_LIAONING()->getProvince(); // string(1) "0"
CityEnum::PROVINCE_LIAONING()->getCity(); // string(5) "22000"
CityEnum::PROVINCE_LIAONING()->getName(); // string(8) "Liaoning"
도시 의 모든 성과 도 시 를 각각 획득 하 다.
CityEnum::enums('PROVINCE'); //
CityEnum::enums('province', false); //
CityEnum::enums('CITY'); //
CityEnum::enums('city', false); //
배열 은 다음 과 같은 방법 을 매 거 했다.
getKey :
getValue :
keyEquals :
valueEquals :
getKeys : 【 】 , , ,
getValues : 【 】 , , ,
getEnums : 【 】 , , ,
hasKey : 【 】 , ,
hasValue : 【 】 , ,
byKey : 【 】 , ,
byValue : 【 】 , ,
다음은 통 일 된 형식 오류 코드 를 예 로 들 어 배열 이 매 거 진 용법 을 소개 합 니 다.다음 오류 코드 매 거 진 에서 key 는 오류 코드 이 고 value 는 오류 설명 입 니 다.
/**
* @method static self OK
* @method static self UNKNOWN_ERROR
* @method static self ERROR_DATA_VALIDATION
* @method static self ERROR_USER_INVALID
* @method static self ERROR_CONFIG_ERROR
*/
class ErrorCodeEnum extends \PhpEnum\ArrayEnum
{
const OK = ['0', 'ok'];
const UNKNOWN_ERROR = ['99999', 'Unknown error'];
const ERROR_DATA_VALIDATION = ['10000', 'The given data was invalid'];
const ERROR_USER_INVALID = ['20000', 'User credentials was invalid'];
const ERROR_CONFIG_ERROR = ['30000', 'Config info is error'];
}
아래 의 방식 을 통 해 오류 코드 와 오류 설명 정 보 를 얻 을 수 있 습 니 다.
ErrorCodeEnum::OK()->getKey(); // string(1) "0"
ErrorCodeEnum::OK()->getValue(); // string(2) "ok"
통 일 된 형식 오류 코드 를 되 돌려 주 려 면 이상 클래스 를 사용자 정의 해 야 합 니 다.
class ApiException extends Exception
{
private $data;
public function __construct(ErrorCodeEnum $enum, $data = '')
{
parent::__construct($enum->getValue(), $enum->getKey());
$this->data = $data;
}
public function toArray()
{
return [
'code' => $this->getCode(),
'msg' => $this->getMessage(),
'data' => $this->data
];
}
}
실패 결 과 를 되 돌 릴 때 사용자 정의 이상 을 던 지고 오류 코드 를 지정 합 니 다.
throw new ApiException(ErrorCodeEnum::ERROR_DATA_VALIDATION());
// {"code":10000,"msg":"The given data was invalid","data":""}
throw new ApiException(ErrorCodeEnum::ERROR_USER_INVALID(),'This is data');
// {"code":20000,"msg":"User credentials was invalid","data":"This is data"}
성공 한 결 과 를 되 돌려 주 려 면 따로 정의 해 야 합 니 다.
return [
'code' => ErrorCodeEnum::OK()->getKey(),
'msg' => ErrorCodeEnum::OK()->getValue(),
'data' => '',
];
// {"code":"0","msg":"ok","data":""}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.