Example #1
0
 /**
  * 获取元信息
  * 会缓存
  * @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;
     }
     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;
 }