protected function generateAdviceCalltype(GenerateStat $aStat, Advice $aAdvice)
 {
     // 只有在 目标函数 和 切入函数同时为 动态方法时,才通过 $this-> 调用 advice
     return (!$aAdvice->isStatic() and !$aStat->aExecutePoint->staticToken()) ? '$this->' : 'self::';
 }
Esempio n. 2
0
 /**
  * 生成织入代码
  */
 protected function generateAdviceDefine(Advice $aAdvice, GenerateStat $aStat, $aNextAroundAdvice = null)
 {
     $sCode = '';
     // static
     if ($aAdvice->isStatic()) {
         $sCode .= 'static ';
     }
     // public, protected, private
     $sCode .= $aAdvice->access() . ' ';
     // function and name
     $sCode .= 'function ' . $this->generateAdviceWeavedFunctionName($aStat, $aAdvice) . "({$aStat->sAdviceDefineArgvsLit})\r\n";
     // body
     $sCode .= "\t{\r\n";
     $sCode .= $this->compileAdviceCode($aStat, $aAdvice, $aNextAroundAdvice);
     $sCode .= "\r\n\t}";
     return new Token(T_STRING, "\r\n\r\n\t" . $sCode);
 }