public static function properties($class, array $options = array())
{
$defaults = array('properties' => array(), 'self' => true);
$options += $defaults;
if (!(is_object($class) && $class instanceof ReflectionClass)) {
try {
$class = new ReflectionClass($class);
} catch (ReflectionException $e) {
return null;
}
}
$options += array('names' => $options['properties']);
return static::_items($class, 'getProperties', $options)->map(function ($item) {
$class = __CLASS__;
$modifiers = array_values($class::invokeMethod('_modifiers', array($item)));
$setAccess = array_intersect($modifiers, array('private', 'protected')) !== array();
if ($setAccess) {
$item->setAccessible(true);
}
$result = compact('modifiers') + array('docComment' => $item->getDocComment(), 'name' => $item->getName(), 'value' => $item->getValue($item->getDeclaringClass()));
if ($setAccess) {
$item->setAccessible(false);
}
return $result;
}, array('collect' => false));
}