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; }
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; } } }
/** * @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); } }
/** * @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; }
/** * @return Folder */ public static function singleton($bCreateNew = true, $createArgvs = null, $sClass = null) { return parent::singleton($bCreateNew, $createArgvs, $sClass ?: __CLASS__); }
public function serialize() { return FSO::tidyPath($this->aRootFolder->path()); }