protected static function _items($class, $method, $options)
{
$defaults = array('names' => array(), 'self' => true, 'public' => true);
$options += $defaults;
$params = array('getProperties' => ReflectionProperty::IS_PUBLIC | ($options['public'] ? 0 : ReflectionProperty::IS_PROTECTED));
$data = isset($params[$method]) ? $class->{$method}($params[$method]) : $class->{$method}();
if (!empty($options['names'])) {
$data = array_filter($data, function ($item) use($options) {
return in_array($item->getName(), (array) $options['names']);
});
}
if ($options['self']) {
$data = array_filter($data, function ($item) use($class) {
return $item->getDeclaringClass()->getName() === $class->getName();
});
}
if ($options['public']) {
$data = array_filter($data, function ($item) {
return $item->isPublic();
});
}
return static::_instance('collection', compact('data'));
}