2017-10-20 46 views
0

Y a-t-il un moyen de vérifier que j'ai déjà défini un objet ReflectionProperty pour être accessible?Comment vérifier si ReflectionProperty est accessible?

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

$foo = new Foo(); 

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

Faire $prop->isPrivate(); retournera true avant et après la mise en accessibilité (comme prévu). Y at-il un moyen de dire que j'ai déjà défini l'accessibilité à true?

Le documentation ne montre pas quelque chose comme une propriété $accessible dans la classe ReflectionProperty, donc je ne sais pas comment il la rendre accessible, à moins que cela se fait sur la classe Foo.

Répondre

0

Vous pouvez utiliser la méthode suivante dans le bloc try-catch:

ReflectionProperty::getValue 

jette un ReflectionException si la propriété est inaccessible. Vous pouvez rendre une propriété protégée ou privée accessible en utilisant ReflectionProperty :: setAccessible().

Documentation Lien:
http://php.net/manual/en/reflectionproperty.getvalue.php

code:

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

Je me rends compte qu'il est possible de comprendre. Je suppose que je me demandais s'il y avait une façon plus propre de vérifier. Cela n'a tout simplement pas de sens pour moi qu'ils nous permettent de définir l'accessibilité, mais pas de la vérifier, puis de lancer une exception si nous ne l'avons pas fait. – GreeKatrina

+0

@GreeKatrina Puis-je savoir pourquoi vous devez vérifier l'accessibilité. On dirait que vous travaillez sur un projet intéressant. Puis-je savoir si c'est un projet open source? Pourriez-vous, s'il vous plaît, modifier ma réponse? – Tarun