2016-06-23 12 views
0

Ich habe das auf meinen Bildschirm gedruckt folgende:Zugriff geschütztes Objekt mit Reflexion

array(1) { 
    [120]=> 
    object(EE_Datetime)#4364 (8) { 
    ["_props_n_values_provided_in_constructor":protected]=> 
    array(12) { 
     ["DTT_ID"]=> 
     string(3) "120" 
     ["EVT_ID"]=> 
     string(4) "2152" 
     ["DTT_name"]=> 
     string(0) "" 
     ["DTT_description"]=> 
     string(0) "" 
     ["DTT_EVT_start"]=> 
     string(19) "2016-06-19 07:00:00" 

Ich brauche die DTT_EVT_start Schlüssel zuzugreifen, aber wie Sie das Objekt zu sehen ist geschützt. Was ist die beste Lösung, die es mir ermöglicht, auf den fraglichen Schlüssel zuzugreifen? Ich kenne die Reflection-Klassen, bin mir aber nicht sicher, ob das der beste Ansatz ist. Dank

+1

Könnten Sie eine Methode erstellen in der Klasse den Wert zurückgeben? – atoms

+0

Unfortunaltey nicht die Klasse ist Third Party und ich bin nicht in der Lage, es zu aktualisieren –

+0

Sie können entweder Reflection oder (besser, denke ich), die Klasse erweitern und neue Methoden schreiben, um mit dem/den geschützten Mitglied (en) zu arbeiten. – axiac

Antwort

0

_props_n_values_provided_in_constructor ist ein Array Eigenschaft so alles, was Sie brauchen es mit Reflexion zu erhalten, ist es Sichtbarkeit zu ändern und es

class TestClass 
{ 
    protected $_props_n_values_provided_in_constructor = []; 

    public function __construct($arr) 
    { 
     $this->_props_n_values_provided_in_constructor = $arr; 
    } 
} 

und den Code-Wert erhalten:

$t = new TestClass(['DTT_EVT_start' => 'some date']); 
$refl = new ReflectionClass($t); 
$property = $refl->getProperty('_props_n_values_provided_in_constructor'); 
$property->setAccessible(true); 
$values = $property->getValue($t); 
echo $values['DTT_EVT_start']; 
Verwandte Themen