コード例 #1
0
ファイル: Method.php プロジェクト: djnewtown/judge
 /**
  * validate param type for {$offset}th param
  * !!!will return true if we are not sure about the type!!!
  *
  * @param int    $offset Param offset
  * @param string $type   Doctype styled type
  * @return bool
  */
 public function isParamType($offset, $expectedType)
 {
     $param = $this->_params[$offset];
     $value = $param->value;
     $type = self::TYPE_MIXED;
     if ($param->value instanceof \PHPParser_Node_Expr_MethodCall) {
         $method = new Method($param->value->name, $param->value->args, null);
         $type = $method->getReturnType();
     } elseif ($param->value instanceof \PHPParser_Node_Scalar_String || $param->value instanceof \PHPParser_Node_Scalar_ClassConst || $param->value instanceof \PHPParser_Node_Scalar_DirConst || $param->value instanceof \PHPParser_Node_Scalar_FileConst || $param->value instanceof \PHPParser_Node_Scalar_FuncConst || $param->value instanceof \PHPParser_Node_Scalar_LineConst || $param->value instanceof \PHPParser_Node_Scalar_MethodConst || $param->value instanceof \PHPParser_Node_Scalar_NSConst || $param->value instanceof \PHPParser_Node_Scalar_TraitConst) {
         $type = self::TYPE_STRING;
     } elseif ($param->value instanceof \PHPParser_Node_Scalar_DNumber) {
         $type = self::TYPE_FLOAT;
     } elseif ($param->value instanceof \PHPParser_Node_Scalar_LNumber) {
         $type = self::TYPE_INT;
     } elseif ($param->value instanceof \PHPParser_Node_Expr_Array) {
         $type = self::TYPE_FLOAT;
     }
     if (in_array($expectedType, array(self::TYPE_UNKNOWN, self::TYPE_MIXED))) {
         return true;
     }
     return $type == $expectedType;
 }