예제 #1
0
 /**
  * Extracts usage of method
  *
  * @param ReflectedMethod $method
  * @return $this
  */
 private function extractUsage(ReflectedMethod $method)
 {
     $tokens = $method->getTokens();
     $codes = $values = array();
     foreach ($tokens as $token) {
         if (in_array($token->getType(), array(T_WHITESPACE, T_BOOL_CAST, T_INT_CAST, T_STRING_CAST, T_DOUBLE_CAST, T_OBJECT_CAST))) {
             continue;
         }
         array_push($codes, $token->getType());
         array_push($values, $token->getValue());
     }
     switch (true) {
         case preg_match('!^(get)|(is)|(has).*!', $method->getName()) && $codes == array(T_RETURN, T_VARIABLE, T_OBJECT_OPERATOR, T_STRING, T_STRING):
             $method->setUsage(MethodUsage::USAGE_GETTER);
             break;
             // basic setter
         // basic setter
         case preg_match('!^set.*!', $method->getName()) && $codes == array(T_VARIABLE, T_OBJECT_OPERATOR, T_STRING, T_STRING, T_VARIABLE, T_STRING) && $values[3] == '=':
             // fluent setter
         // fluent setter
         case preg_match('!^set.*!', $method->getName()) && $codes == array(T_VARIABLE, T_OBJECT_OPERATOR, T_STRING, T_STRING, T_VARIABLE, T_STRING, T_RETURN, T_VARIABLE, T_STRING) && $values[3] == '=' && $values[7] == '$this':
             $method->setUsage(MethodUsage::USAGE_SETTER);
             break;
         default:
             $method->setUsage(MethodUsage::USAGE_UNKNWON);
     }
     return $this;
 }