Можно ли получить значение частной собственности с помощью Reflection?

Кажется, это не работает:

$ref = new ReflectionObject($obj); if($ref->hasProperty('privateProperty')){ print_r($ref->getProperty('privateProperty')); } 

Он попадает в цикл IF, а затем выдает ошибку:

Свойство privateProperty не существует

: |

$ref = new ReflectionProperty($obj, 'privateProperty') тоже не работает …

На странице документации перечислены несколько констант, включая IS_PRIVATE . Как я могу использовать это, если я не могу получить доступ к частной собственности lol?

 class A { private $b = 'c'; } $obj = new A(); $r = new ReflectionObject($obj); $p = $r->getProperty('b'); $p->setAccessible(true); // <--- you set the property to public before you read the value var_dump($p->getValue($obj)); 

getProperty генерирует исключение, а не ошибку. Значит, вы можете справиться с этим и спасти себя, if :

 $ref = new ReflectionObject($obj); $propName = "myProperty"; try { $prop = $ref->getProperty($propName); } catch (ReflectionException $ex) { echo "property $propName does not exist"; //or echo the exception message: echo $ex->getMessage(); } 

Чтобы получить все частные свойства, используйте $ref->getProperties(IS_PRIVATE);