【问题标题】:list of php constants linked by operator in filter_varfilter_var 中由运算符链接的 php 常量列表
【发布时间】:2015-01-06 20:02:23
【问题描述】:

我创建了一个名为 Sanitize 的类。

我使用 filter_var 函数来过滤和清理数据。我从数组中构建了 filter_var() 第三个参数:$options,类似于以下代码:

private $options = array('typeOfData' => array('options' => array(), 'flags' => array()));

我可以使用正确的选项构建一个数组,但是这种方法行不通。我只想要选项或标志中的一个,这不是问题。不幸的是,我想将几​​个选项或标志常量传递给 filter_var。

对于标志,是否可以构建想要的结果,如 FLAG1 |标志2? 如果不是,我是否应该使用 filter_var,并根据所需的标志切换到使用 filter_var?

这是当前使用 filter_var 的代码:filter_var($value, $this->filters[$typeOFData], $this->currentOptions);

【问题讨论】:

  • $options 是您的一个类方法中的可选参数吗?正确的?你想传递给选项什么?您要过滤掉什么?
  • 将参数更正为filter_var() 的第三个参数,而不是函数的参数。添加:filter_var() 在我的代码中使用。
  • 您想使用不同的标志多次过滤相同的字符串吗?还是您想根据实例使用不同的标志进行过滤?两种方式都很简单。
  • 我想根据输入类型 (gettype()) 和标记进行过滤。例如:SANITIZE_FLOAT 不带标志,或带 FILTER_FLAG_ALLOW_FRACTION,或带更多选项。

标签: php arrays flags filter-var


【解决方案1】:

根据类型进行清理的类:

class Sanitize{
private $data;
private $filteredData;
private $options;
private $typeof;
private $filters;

function __contruct($data){

$this->typeof = gettype($data);
$this->data = $data;

switch ($this->typeof){
    case "integer":
       $this->options = array( /* array of options for integer type*/ );
       $this->filters = array( /*array of all filters you want to use on integers*/ )
        break;
    case "string":
       //....
}

private function getSanitized(){

$filtersNum = count($this->filters);

for($x=0;$x<$filtersNum;$x++){

if(allowsOptions($this->filters[$x])){ $options = $this->options; }else{$options = null;}

$this->filteredData = filter_var($this->data, $this->filters[$x], $options)
}
}

private function allowsOptions($filter){
/* all your code to check*/
return true or false
}
}

我希望这会有所帮助,如果没有,请告诉我。

【讨论】:

  • 这很好,但是你的课的基础和我的很相似。问题不在于一个过滤器常量标志,例如array('flag' =&gt; FLAG),而是当我想放置多个标志时:`ar​​ray('flag' => flag1 | flag2)。
  • 我稍微修改了一下。一旦你为所有类型设置了所有过滤器,你就可以编写一个方法。让方法循环通过过滤器数组。明白了吗?
  • 它有效。但我遇到的问题是我想要多个标志,而不仅仅是一个,我不知道该怎么做。
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 2014-03-03
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
相关资源
最近更新 更多