private function reflect()
{
$class = new \ReflectionClass($this->_className);
$properties = array();
$events = array();
$methods = array();
$isComponent = is_subclass_of($this->_className, 'TComponent') || strcasecmp($this->_className, 'TComponent') === 0;
foreach ($class->getMethods() as $method) {
if ($method->isPublic() || $method->isProtected()) {
$methodName = $method->getName();
if (!$method->isStatic() && $isComponent) {
if ($this->isPropertyMethod($method)) {
$properties[substr($methodName, 3)] = $method;
} else {
if ($this->isEventMethod($method)) {
$methodName[0] = 'O';
$events[$methodName] = $method;
}
}
}
if (strncmp($methodName, '__', 2) !== 0) {
$methods[$methodName] = $method;
}
}
}
$reserved = array();
ksort($properties);
foreach ($properties as $name => $method) {
$this->_properties[$name] = array('type' => $this->determinePropertyType($method), 'readonly' => !$class->hasMethod('set' . $name), 'protected' => $method->isProtected(), 'class' => $method->getDeclaringClass()->getName(), 'comments' => $method->getDocComment());
$reserved['get' . strtolower($name)] = 1;
$reserved['set' . strtolower($name)] = 1;
}
ksort($events);
foreach ($events as $name => $method) {
$this->_events[$name] = array('class' => $method->getDeclaringClass()->getName(), 'protected' => $method->isProtected(), 'comments' => $method->getDocComment());
$reserved[strtolower($name)] = 1;
}
ksort($methods);
foreach ($methods as $name => $method) {
if (!isset($reserved[strtolower($name)])) {
$this->_methods[$name] = array('class' => $method->getDeclaringClass()->getName(), 'protected' => $method->isProtected(), 'static' => $method->isStatic(), 'comments' => $method->getDocComment());
}
}
}