2017-10-20 6 views
0

Gibt es eine Möglichkeit zu überprüfen, ob ich bereits eine ReflectionProperty für den Zugriff eingerichtet habe?Wie überprüft man, ob ReflectionProperty zugänglich ist?

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

$foo = new Foo(); 

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

$prop->isPrivate(); Dadurch wird das Rück true vor und nach der Zugänglichkeit Einstellung (wie erwartet). Gibt es eine Möglichkeit zu sagen, dass ich die Barrierefreiheit bereits auf "True" gesetzt habe?

The documentation zeigt nichts wie ein $accessible Eigenschaft in der Klasse Reflection, also bin ich nicht sicher, wie es sie zugänglich ist zu machen, wenn es nicht auf der Foo Klasse getan hat.

Antwort

0

Sie können die folgende Methode in try-catch-Block verwenden:

ReflectionProperty::getValue 

Wirft eine Reflection, wenn die Eigenschaft nicht zugänglich ist. Sie können eine geschützte oder private Eigenschaft mit ReflectionProperty :: setAccessible() zugänglich machen.

Dokumentation Verweis:
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

Ich weiß, es ist möglich, um herauszufinden. Ich glaube, ich habe mich gefragt, ob es eine sauberere Art der Überprüfung gab. Es macht einfach keinen Sinn für mich, dass sie uns erlauben würden, die Barrierefreiheit zu setzen, aber nicht zu überprüfen und dann eine Ausnahme auszulösen, wenn wir es nicht tun würden. – GreeKatrina

+0

@GreeKatrina Darf ich wissen, warum Sie die Zugänglichkeit überprüfen müssen. Anscheinend arbeiten Sie an einem interessanten Projekt. Darf ich wissen, ob es ein Open-Source-Projekt ist? Könnten Sie bitte meine Antwort auffrischen? – Tarun

Verwandte Themen