2017-09-11 5 views
2

인스턴스가 인스턴스화 된 클래스에 상수가 정의되어 있는지 어떻게 알 수 있습니까?상수가 다른 클래스에서 정의되었는지 어떻게 확인합니까?

나는이 :

Class foo { 
    const BAR = 'baz'; 
} 

이후 $foo가 다른 클래스의 함수로 전달지고 나는 그것이 설정되어 있는지 확인하고 그 값 (또는 기본값)를 사용하여 상기

Class abc { 
    public function xyz($foo) 
    { 
    if (defined($foo::BAR)) { 
     $var = $foo::BAR; 
    } else { 
     $var = 'default'; 
    } 
    } 
} 

하지만 내가 무엇을 하든지 상수가 정의되어 있는지 파악할 수는 없습니다. else에 도달하기 전에 정의되거나 작동하거나 정의되지 않고 FatalError: Undefined class constant 'BAR'을 던집니다. 그것이 내가 Laravel 5.4와 PHP 5.6에서 일하고 있어요, 전혀 도움이된다면

$foo::BAR   | string 'baz' (length=3) 
$foo->BAR   | null 
$foo::BAR !== null | boolean true (when set) Error (when unset) 
defined($foo::BAR) | boolean false 
defined('$foo::BAR') | boolean false 
defined("$foo::BAR") | boolean false 
defined('BAR', $foo) | Error 

:

다양한 I가 한 덤프 (내가 기억 할 수있는)과 그 결과입니다.

+1

클래스 일정 가시성이 근무 PHP 7.1 이상 – amflare

답변

4

은 아마 개체 변수 대신 클래스 이름으로 더 잘 작동 :

if(defined(get_class($foo).'::BAR')) // Do something 
+1

입니다! 감사! – amflare