public function getMetaInfo($class)
{
if (is_string($class)) {
$refl = new \ReflectionClass($class);
} else {
$refl = $class;
}
$name = $refl->getName();
if ($this->metas !== null && isset($this->metas[$name])) {
return $this->metas[$name];
}
static $cache = null;
if ($cache === null) {
$cache = new Cache();
}
$succeeded = false;
$cache_key = 'meta_' . sha1($refl->getFileName() . '/' . $name);
$data = $cache->get($cache_key, $succeeded);
if ($succeeded) {
return $data;
}
MetaInfo::testAnnotation();
$data = MetaInfo::get($name);
$files = [$refl->getFileName()];
$parent = $refl->getParentClass();
if ($parent) {
$files[] = $parent->getFileName();
}
foreach ($refl->getInterfaces() as $i) {
$files[] = $i->getFileName();
}
$cache->set($cache_key, $data, 60, new FileExpiredChecker($files));
return $data;
}