2017-10-20 1 views
0

이미 ReflectionProperty에 액세스 할 수 있도록 설정했는지 확인하는 방법이 있습니까?ReflectionProperty에 액세스 할 수 있는지 확인하는 방법은 무엇입니까?

class Foo { 
    private $baz = 'bar'; 
} 

$foo = new Foo(); 

$prop = new ReflectionProperty($foo, 'baz'); 
$prop->setAccessible(true); 

$prop->isPrivate();을하는 것은 전 (예상대로) 접근성을 설정 한 후 true를 반환합니다. 접근성을 이미 true로 설정했다고 말할 수있는 방법이 있습니까?

documentation

는 ReflectionProperty 클래스의 $accessible 재산 같은 것을 표시되지 않으므로이 Foo 클래스에서 수행하지 않는 이상 나는 그것을 액세스 할 수 있도록 어떻게 모르겠어요.

답변

0

당신은 시도 - catch 블록 내부에 다음과 같은 방법을 사용할 수 있습니다 : 속성이 액세스 할 수없는 경우

ReflectionProperty::getValue 

는 ReflectionException를 발생시킵니다. ReflectionProperty :: setAccessible()을 사용하여 보호되거나 사유 재산에 액세스 할 수 있습니다.

문서 링크 :
http://php.net/manual/en/reflectionproperty.getvalue.php

코드 : 나는 그것을 알아낼 가능성이 실현

function isPropertyAccessible($property){ 
    $result = true; 
    try{ 
     ReflectionProperty::getValue($property); 
    } 
    catch(ReflectionException $e){ 
     $result = false; 
    } 
     return $result; 
    } 
+0

. 나는 더 깨끗한 검사 방법이 있는지 궁금해하고 있었다. 접근성을 설정할 수는 있지만 체크하지 않고 예외로 설정하면 예외가 발생한다는 것은 나에게 의미가 없습니다. – GreeKatrina

+0

@ GrreeKatrina 왜 접근성을 확인해야하는지 알 수 있습니까? 당신이 흥미있는 프로젝트에 참여하고있는 것 같습니다. 오픈 소스 프로젝트가 있는지 알고 싶습니까? 내 대답을 upvote하시기 바랍니다. – Tarun

관련 문제