$patterns = [
    "POST" => "/^\/user$/i",
    "GET" => ["/^\/user\/(\d+)/i", "/^\/user$/i"],
    //获取详细信息和列表信息,这里支持了多模式,所以是个数组
];
$functions = [
    "POST" => function ($request) {
        $ret =1;
        if ($ret) {

            return ["status" => "新增用户成功"];
        }
        return false;
    },
    "GET" => [function ($matchs, $request)   
    {   
        //相应的这里也变成了一个函数
        var_dump($matchs);
        $userid = 0;
        $delay = false;
        if ($matchs) {
            $userid = $matchs[1];
            return $userid;
        }
        return false;
    },
        function ($matchs,$request)  {
            var_dump($matchs);
            //取出用户列表信息
            return false;
        }
    ]
];

function getMatchIndex($method, $rqpath) //由于匹配变成了数组形式,因此这里要返回
{
    global $patterns, $functions;
    $getPattern = $patterns[$method];
    if ($getPattern) {
        if (is_array($getPattern)) //如果是数组 做单独处理
        {
            $index = 0;
            foreach ($getPattern as $p) //循环判断是否匹配,匹配上了 则取出 相关的函数和匹配结果
            {
                if (preg_match($p, $rqpath, $matchs)) {
                    return ["func" => $functions[$method][$index], "matchs" => $matchs];
                }
                $index++;
            }
        } else //不是数组则直接返回
        {
            //PHP路由类
            if (preg_match($getPattern, $rqpath, $matchs)) {
                return ["func" => $functions[$method], "matchs" => $matchs];
            }
        }
    }
    return false;
}

$request=1;
$requestMethod='GET';
$requestPath='/user';
if (isset($patterns[$requestMethod]) && ($mathResult = getMatchIndex($requestMethod, $requestPath)) !== false) {
    $func = $mathResult["func"];
    //是一个function
    $result = $func($mathResult["matchs"], $request);

}
Last modification:January 31, 2020
如果觉得我的文章对你有用,请随意赞赏