2017-10-20 9 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

あなたは、try-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

@GreeKatrinaなぜあなたはアクセシビリティをチェックする必要があるのか​​分かりますか?興味深いプロジェクトに取り組んでいるようだ。オープンソースプロジェクトがあるかどうか分かりますか?私の答えをアップしてください。 – Tarun

関連する問題