/** * 获取元信息 * 会缓存 * @param string $class * @return array */ 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; } $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; }