PHP回撥過濾器及回撥函式寫法
阿新 • • 發佈:2018-11-04
名稱 | id | 說明 | 選項options |
回撥過濾器(callback) | 1024 | 呼叫自定義函式來過濾資料 | callable函式或方法 |
回撥函式實現
回撥函式必須接受一個待過濾的值,並返回過濾後的值,回撥函式有四種實現方式。
第一種是直接定義回撥函式,並在使用過濾器函式時,將回調過濾器的options設定為自定義的回撥函式。
<?php function trimString($value){ return trim($value); } $args=array( 'options'=>'trimString', ); var_dump(filter_var('abc ',FILTER_CALLBACK,$args)); ?>
第二種是在使用過濾器函式時,將回調過濾器的options直接設定為回撥函式。
<?php
$args=array(
'options'=>function ($value){return trim($value);},
);
var_dump(filter_var('abc ',FILTER_CALLBACK,$args));
?>
第三種是通過閉包實現呼叫回撥函式來傳遞其他引數。
<?php function trimString($array){ return function($value = null) use ($array){ if(key_exists('character_mask',$array)){ return trim($value,$array['character_mask']); } return trim($value); }; } $args=array( 'options'=>trimString(array("character_mask"=>'a..c ')), ); var_dump(filter_var('abcd ',FILTER_CALLBACK,$args)); ?>
第四種是使用類中的函式作為回撥函式,可以用來將多個過濾器回撥函式集中到一起。
<?php class TrimFilter{ private $options=array(); private $defaults=array('character_mask'=>" \t\n\r\0\x0B"); public function __construct(array $options=array()){ $this->options = $options; } private function get_options(array $defaults){ return array_merge($defaults, $this->options); } function trimString($value){ $ops=$this->get_options($this->defaults); if(key_exists('character_mask',$ops)){ return trim($value,$ops['character_mask']); } return trim($value); } function ltrimString($value){ $ops=$this->get_options($this->defaults); if(key_exists('character_mask',$ops)){ return ltrim($value,$ops['character_mask']); } return ltrim($value); } function rtrimString($value){ $ops=$this->get_options($this->defaults); if(key_exists('character_mask',$ops)){ return rtrim($value,$ops['character_mask']); } return rtrim($value); } } $trim_args=array( 'options'=>array( new TrimFilter(array('character_mask'=>" a")),TRIMSTRING ) ); $ltrim_args=array( 'options'=>array( new TrimFilter(array('character_mask'=>" a")),LTRIMSTRING ) ); $rtrim_args=array( 'options'=>array( new TrimFilter(),RTRIMSTRING ) ); $str="abcd "; var_dump(filter_var($str,FILTER_CALLBACK,$trim_args)); var_dump(trim($str," a")); var_dump(filter_var($str,FILTER_CALLBACK,$ltrim_args)); var_dump(ltrim($str," a")); var_dump(filter_var($str,FILTER_CALLBACK,$rtrim_args)); var_dump(ltrim($str)); ?>