PHP 상수:장점 단점
-
05-07-2019 - |
문제
최근에 나는 정수 값을 상수에 할당하고 단순히 그 목적을 식별하는 수단으로 상수 이름을 사용하는 습관을 들였습니다.그러나 어떤 경우에는 문자열 표현이 필요할 때 typeToString($const)과 같은 함수를 작성해야 하는 경우도 있습니다.분명히 이것은 비효율적이고 불필요하지만 가끔씩만 문제가 됩니다.
그래서 제 질문은 제가 고려해야 할 다른 절충안이 있습니까?입니다.어떤 경우가 더 깨끗하고 표준을 더 잘 준수하는 것으로 간주됩니까?또한 대부분의 경우 성능 차이가 무시할 수 있습니까?
사례 1:(문자열 버전이 필요하지 않으면 더 빠르나요?)
class Foo {
const USER_TYPE_ADMIN = 0;
const USER_TYPE_USER = 1;
const USER_TYPE_GUEST = 2;
public $userType = self::USER_TYPE_ADMIN;
public function __construct($type) {
$this->userType = $type;
}
public function typeToString() {
switch($this->userType) {
case self::USER_TYPE_ADMIN:
return 'admin';
break;
case self::USER_TYPE_USER:
return 'user';
break;
case self::USER_TYPE_GUEST:
return 'guest';
break;
default:
return 'unknown';
break;
}
}
}
$foo = new Foo(Foo::USER_TYPE_GUEST);
echo $foo->typeToString();
// Displays "guest"
사례 2:(문자열 버전이 필요할 때 더 빠르고 쉬움)
class Foo {
const USER_TYPE_ADMIN = 'admin';
const USER_TYPE_USER = 'user';
const USER_TYPE_GUEST = 'guest';
public $userType = self::USER_TYPE_ADMIN;
public function __construct($type) {
$this->userType = $type;
}
}
$foo = new Foo(Foo::USER_TYPE_GUEST);
echo $foo->userType();
// Displays "guest"
해결책
성능 차이는 많은 것을 저장하지 않는 한 무시할 수 있습니다. 나는 쓸 것이다 toString()
더 간결하게 방법 :
$strings = array
(
self::USER_TYPE_ADMIN => 'admin',
self::USER_TYPE_USER => 'user',
);
if (!isset($strings[$type]))
return 'unknown';
return $strings[$type];
또한, 당신은 만들 수 있습니다 $strings
배열 a static
.
다른 팁
솔직히 말해서, 나는 당신의 상수를 기본적으로 현으로 정의 할 때 어떤 종류의 공연 "히트"가 있는지 모르겠습니다. 측정하기 어렵습니다.
개인적으로, 상수의 가치가 문자 그대로 의미가 있다면, 그 값을 할당하십시오. 상수의 가치가 옵션 선택기 (또는 다른 사람 표시 가치), 그 다음 정수 또는 적절한 선택을 사용하십시오.
이 경우 문자열 상수가 최선의 선택이라고 생각합니다.코드가 더 좋아 보입니다.
물론 마지막 성능이 필요한 경우 정수 상수를 사용하십시오.그러나 문자열 비교가 병목 현상이라는 것을 프로파일러로 확인한 후에만 가능합니다.어쨌든, 대부분의 애플리케이션에는 데이터베이스 액세스 등과 같이 더 비싼 것들이 많이 있습니다.
const 정수를 사용하는 대신 일반적으로 문자열을 인쇄 해야하는 경우 문자열과 함께갑니다. 그래서 나는 같은 일을 할 것입니다 $foo = new Foo('guest');
. 생성자의 입력을 여전히 검증 할 수 있으며 필요할 때마다 표시 할 수 있습니다.
당신이 쓴 예에서 당신은 모든 방법을 삭제하고 클래스를 정적으로 만들 수 있으며 자신을 열거 자로 만들었을 것입니다. 이와 같이:
class Enumeration{ public static const One=1; public static const Two=2; public static const Three=3; }
상수를 사용하는 다른 편리한 방법은 응용 프로그램 구성으로 사용하는 것입니다. 그들은 성능이 훨씬 빠릅니다. 그 후 구성을 위해 XML 파일을 구문 분석합니다.