分享一个PHP处理请求参数的Trait

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32080545/article/details/79152739

比如这样调用getInput方法:
getInput('a','|b','|c[0]','|d[:date,Y-m-d H:i:s]','|e[:time]');
表示:获取必需参数 a,可选参数b,可选参数 c 默认值为0,可选参数d,默认值使用函数date返回。


参数规则:| 表示为可选参数
[] 可选参数的默认值
: 可选参数使用函数返回,多个参数用英文逗号分隔


返回:如果必选参数不完整返回false,如果可选参数没指定默认值返回空字符串


支持restful请求

代码如下:

<?php
/**
 * 请求参数获取.
 * User: zheng
 *
 *
 */


Trait Param
{
    public function getInput(...$arg)
    {
        $reqParam  = [];
        $reqMethod = $_SERVER['REQUEST_METHOD'];
        switch ($reqMethod){
            case 'GET':
                $reqParam = $_GET;
                break;
            case 'POST':
                $reqParam = $_POST;
                break;
            default:
                parse_str(file_get_contents('php://input'), $reqParam);
                break;
        }
        $reqParam = array_filter($reqParam);
        $returnParam = [];
        foreach ($arg as $val){
            if(false !==strpos($val,'|')){    //是否是必选参数
                $startPos = strpos($val,'|');
                $endPos = strpos($val,'[');
                $param = $endPos?substr($val,$startPos+1,$endPos-1):substr($val,$startPos+1);
                if(isset($reqParam[$param])){      //参数是否请求
                    $returnParam[$param] = $reqParam[$param];
                }else{                         //获取默认值
                    if($endPos){
                        $endRight = strpos($val,']');
                        $funStarPos = strpos($val,':');
                        if(false !== strpos($val,':')){   //是否通过函数获取默认值
                            //默认值函数赋值
                            if(false !== strpos($val,',')){  //函数是否有参数
                                $paramStart = strpos($val,',');
                                $funParam = substr($val,$paramStart+1,($endRight-($paramStart+1)));
                                $funName = substr($val,$funStarPos+1,($paramStart-($funStarPos+1)));
                                $arg = explode(',',$funParam);
                                $returnParam[$param] =   call_user_func_array($funName,$arg);
                            }else{
                                $funName = substr($val,$funStarPos+1,($endRight-($funStarPos+1)));
                                $returnParam[$param] = call_user_func($funName);
                            }
                        }else{
                            $returnParam[$param] = substr($val,$endPos+1,($endRight-(($endPos)+1)));
                        }
                    }else{
                        $returnParam[$param]='';
                    }
                }
            }else{
                if(isset($reqParam[$val])){
                    $returnParam[$val] = $reqParam[$val];
                }else{
                    return false;
                }
            }
        }
        return $returnParam;
    }
}


//测试
class TestGet
{
    use Param;
}

$test = new TestGet();
$params = $test->getInput('a','|b','|c[0]','|d[:date,Y-m-d H:i:s]','|e[:time]');
var_dump($params);
echo  '<hr/>';
$params2 = $test->getInput('c');
var_dump($params2);

猜你喜欢

转载自blog.csdn.net/qq_32080545/article/details/79152739
今日推荐