반응형
클래스 상수가 있는지 확인합니다.
PHP 클래스에 상수가 정의되어 있는지 확인하려면 어떻게 해야 합니까?
class Foo {
const BAR = 1;
}
그런 것이 있습니까?property_exists()
또는method_exists()
클래스 상수에 대해?아니면 그냥 사용해도 될까요?defined("Foo::BAR")
?
아래 코드로 상수가 정의되어 있는지 확인할 수 있습니다.
<?php
if(defined('className::CONSTANT_NAME')){
//defined
}else{
//not defined
}
예, 상수 이름 앞에 클래스 이름을 사용합니다.
defined('SomeNamespace\SomeClass::CHECKED_CONSTANT');
http://www.php.net/manual/en/function.defined.php#106287
다음과 같은 세 가지 방법이 방법은 다음과 같습니다.
정의된
[PHP >= 4 - 가장 역호환적인 방법]
$class_name = get_class($object); // remember to provide a fully-qualified class name
$constant = "$class_name::CONSTANT_NAME";
$constant_value = defined($constant) ? $constant : null;
참고: 사용defined()
PHP 7.1에서 가능한 개인 상수에서 "개인 상수에 액세스할 수 없음" 오류가 발생합니다.사용 중ReflectionClass
또는ReflectionClassConstant
효과가 있을 것입니다.
반사 클래스
[PHP >= 5]
$class_reflex = new \ReflectionClass($object);
$class_constants = $class_reflex->getConstants();
if (array_key_exists('CONSTANT_NAME', $class_constants)) {
$constant_value = $class_constants['CONSTANT_NAME'];
} else {
$constant_value = null;
}
반사 클래스 상수
[PHP >= 7.1.0]
$class_name = get_class($object); // fully-qualified class name
try {
$constant_reflex = new \ReflectionClassConstant($class_name, 'CONSTANT_NAME');
$constant_value = $constant_reflex->getValue();
} catch (\ReflectionException $e) {
$constant_value = null;
}
이보다 더 좋은 방법은 없습니다.필요 및 사용 사례에 따라 다릅니다.
이 기능을 사용할 수 있습니다.
function constant_exists($class, $name){
if(is_string($class)){
return defined("$class::$name");
} else if(is_object($class)){
return defined(get_class($class)."::$name");
}
return false;
}
또는 ReflectionClass를 사용하는 대체 버전
function constant_exists($class, $name) {
if(is_object($class) || is_string($class)){
$reflect = new ReflectionClass($class);
return array_key_exists($name, $reflect->getConstants());
}
return false;
}
그래서 시도해봤습니다.
$constants = new \ReflectionClass(App\Namespace\ClassName::class);
if ($constants->getConstant('CONSTANT_NAME')){
// Do this
} else {
// Do that
}
그리고 잘 작동했습니다.
언급URL : https://stackoverflow.com/questions/24159178/check-if-a-class-constant-exists
반응형
'programing' 카테고리의 다른 글
jQuery에서 입력 파일이 비어 있는지 확인하는 방법 (0) | 2023.08.04 |
---|---|
Oracle에서 오른쪽 괄호가 누락되었다고 생각하는 이유는 무엇입니까? (0) | 2023.08.04 |
이것은 무엇을 의미합니까?:*(int32 *) 0 = 0; (0) | 2023.08.04 |
mysql의 그룹당 행 번호 (0) | 2023.08.04 |
하나의 항목을 Flexbox와 올바르게 정렬하려면 어떻게 해야 합니까? (0) | 2023.07.30 |