1

首先我将展示函数:

function validate($data, $filter){
  if(!filter_var($data, $filter))
  { 
     return 'Filter used:'.$filter;
  }
  else
  {
     return 'good';
  }
}

当我使用这个函数时,它看起来像这样:

$email = 'hello@hello.org';
echo validate($email, FILTER_VALIDATE_EMAIL);

输出是:

使用的过滤器:274

问题是我希望输出为:

使用的过滤器:FILTER_VALIDATE_EMAIL。

4

2 回答 2

5

要获得实际的常量名称,您可能需要将过滤器作为字符串传递并使用constant()

function validate($data, $filter){
  if(!filter_var($data, constant($filter)))
  { 
     return 'Filter used:'.$filter;
  }
  else
  {
     return 'good';
  }
}

然后像这样使用它:

echo validate($email, 'FILTER_VALIDATE_EMAIL');

我不得不考虑多个标志,我很无聊。这可能会变得非常混乱,但对于简单的过滤器它可以工作:

function validate(){    
  $args = func_get_args();
  $data = array_shift($args);
  $con_args = array_map('constant', $args);
  array_unshift($con_args, $data);

  if(!call_user_func_array('filter_var', $con_args))
  { 
     return 'Filter used:'.implode(', ', $args);
  }
  else
  {
     return 'good';
  }
}

echo validate($url, 'FILTER_VALIDATE_URL', 'FILTER_FLAG_PATH_REQUIRED');
于 2015-08-25T19:38:31.430 回答
1

FILTER_VALIDATE_EMAIL是设置为 的命名常量274。您的validate()函数永远不会看到“FILTER_VALIDATE_EMAIL”,它只是看到274被传递给它并传递274filter_var()知道如何处理它的 。

对于开发人员来说,常量的一个优势是:通过使用具有自动完成和代码智能功能的 IDE,您可以确定变量的名称,从而避免可能出现的拼写错误。

查看@AbraCadaver 的答案,为您的查询提供一个优雅的解决方案。

于 2015-08-25T19:48:30.573 回答