版权声明:本文为博主原创文章,未经博主允许不得转载。 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);