コード例 #1
0
ファイル: Aspect.php プロジェクト: JeCat/framework
 public static function createFromToken(ClassDefine $aClassToken, $sAspectFilepath = null)
 {
     $sAspectName = $aClassToken->fullName();
     $aTokenPool = $aClassToken->parent();
     $aAspect = new self($sAspectName);
     // 先定义 pointcut
     foreach ($aTokenPool->functionIterator($sAspectName) as $aMethodToken) {
         if (!($aDocCommentToken = $aMethodToken->docToken()) or !($aDocComment = $aDocCommentToken->docComment())) {
             continue;
         }
         // pointcut
         if ($aDocComment->hasItem('pointcut')) {
             $aPointcut = Pointcut::createFromToken($aMethodToken);
             $aAspect->pointcuts()->add($aPointcut);
         }
     }
     // 然后定义 advice
     foreach ($aTokenPool->functionIterator($sAspectName) as $aMethodToken) {
         if (!($aDocCommentToken = $aMethodToken->docToken()) or !($aDocComment = $aDocCommentToken->docComment())) {
             continue;
         }
         if ($aDocComment->hasItem('advice')) {
             $aAdvice = Advice::createFromToken($aMethodToken, $aAspect);
             $aAspect->addAdvice($aAdvice);
         }
     }
     $aAspect->sAspectName = $sAspectName;
     if ($sAspectFilepath) {
         $aAspect->setAspectFilepath(FSO::tidyPath($sAspectFilepath));
     }
     return $aAspect;
 }
コード例 #2
0
 public function current()
 {
     if ($this->nFlags & self::RECURSIVE_SEARCH) {
         $sAbsolutePath = $this->aIterator->current();
     } else {
         $sAbsolutePath = $this->aIterator->getPathname();
     }
     $sRelativePath = FSO::relativePath($this->aParentFolder->path(), $sAbsolutePath);
     if ($this->nFlags & self::RETURN_FSO) {
         if ($this->aIterator->isDir()) {
             return $this->aParentFolder->findFolder($sRelativePath);
         } else {
             if ($this->aIterator->isFile()) {
                 return $this->aParentFolder->findFile($sRelativePath);
             }
         }
     } else {
         if ($this->nFlags & self::RETURN_ABSOLUTE_PATH) {
             // 这是真实文件系统的路径,不能返回这个
             // return (string)$sAbsolutePath;
             if ($this->aIterator->isDir()) {
                 return $this->aParentFolder->findFolder($sRelativePath)->path();
             } else {
                 if ($this->aIterator->isFile()) {
                     return $this->aParentFolder->findFile($sRelativePath)->path();
                 }
             }
         } else {
             return (string) $sRelativePath;
         }
     }
 }
コード例 #3
0
ファイル: File.php プロジェクト: JeCat/framework
 /**
  * @return File
  */
 public static function createInstance($sPath, $sClassName = null)
 {
     if ($sClassName === null or $sClassName === __CLASS__) {
         return new self($sPath);
     } else {
         return parent::createInstance($sPath, $sClassName);
     }
 }
コード例 #4
0
ファイル: AOP.php プロジェクト: JeCat/framework
 /**
  * @return AOP 
  */
 public function registerBean(array $arrConfig, $sAspectDefineFile = null)
 {
     if (empty($arrConfig['class'])) {
         $arrConfig['class'] = 'aspect';
     }
     $aAspect = BeanFactory::singleton()->createBean($arrConfig);
     if ($sAspectDefineFile) {
         $aAspect->setAspectFilepath(FSO::tidyPath($sAspectDefineFile));
     }
     $this->aspects()->add($aAspect);
     $this->aPointcutIterator = null;
     $this->aJointPointIterator = null;
     return $this;
 }
コード例 #5
0
ファイル: Folder.php プロジェクト: JeCat/framework
 /**
  * @return Folder
  */
 public static function singleton($bCreateNew = true, $createArgvs = null, $sClass = null)
 {
     return parent::singleton($bCreateNew, $createArgvs, $sClass ?: __CLASS__);
 }
コード例 #6
0
ファイル: FsSetting.php プロジェクト: JeCat/framework
 public function serialize()
 {
     return FSO::tidyPath($this->aRootFolder->path());
 }