Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:看到自己写的控制器方法通过 url直接访问到, 感觉如何?是不是有一种框架的即视感
// 这个里参数用GET方式出入
class UserController
{
public function getUser($id, $name)
{
return "id=>$id name=>$name";
}
}
// 解析PATHINFO
// $_SERVER['PATH_INFO'];返回的是字符串,但我们需要的是数组
// 第一个/前面没有内容会变成键值指向空
print_r(explode('/', $_SERVER['PATH_INFO']));
echo '<hr>';
// 去空 重置索引
echo '去空 重置索引';
$pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])));
print_r($pathinfo);
echo '<hr>';
// 解析控制器
// 通常喜欢加一个后缀所以在上面的类后面也要写上
$controller = ucfirst(array_shift($pathinfo)) . 'Controller';
echo $controller;
echo '<hr>';
// 解析控制器中的方法
$action = array_shift($pathinfo);
echo '类方法不区分大小写' . $action . '与getUser是一样的';
echo '<hr>';
// 解析参数
// parse_str(查询字符串,数组)将解析的查询字符串放到数组里头
// 注意:返回的是一个关联数组
parse_str($_SERVER['QUERY_STRING'], $params);
print_r($params);
echo '<hr>';
// 调用控制器
// 类名可以用变量表示
$user = new $controller;
// 因为参数在一个索引数组里面
// ... 只可以结构索引数组
$params = array_values($params);
echo $user->$action(...$params);
// 这个里参数用PATHIHFO方式出入
class UserController
{
public function getUser($id, $name)
{
return "我的id=>$id 我的名字=>$name";
}
}
// 解析PATHINFO
// $_SERVER['PATH_INFO'];返回的是字符串,但我们需要的是数组
// 第一个/前面没有内容会变成键值指向空
print_r(explode('/', $_SERVER['PATH_INFO']));
echo '<hr>';
// 去空 重置索引
echo '去空 重置索引';
$pathinfo = array_values(array_filter(explode('/', $_SERVER['PATH_INFO'])));
print_r($pathinfo);
echo '<hr>';
// 解析控制器
$controller = ucfirst(array_shift($pathinfo)) . 'Controller';
echo $controller;
echo '<hr>';
// 解析控制器中的方法
$action = array_shift($pathinfo);
echo '类方法不区分大小写' . $action . '与getUser是一样的';
echo '<hr>';
// 解析参数
// 判读数组中剩余的元素
// print_r($pathinfo);
$arr = [];
for ($i = 0; $i < count($pathinfo); $i += 2) {
// 不存在的值会返回null
if ($pathinfo[$i + 1]) {
$arr[$pathinfo[$i]] = $pathinfo[$i + 1];
}
}
echo '<hr>';
print_r($arr);
echo '<hr>';
// 调用控制器
// 类名可以用变量表示
$user = new $controller;
// 因为参数在一个索引数组里面
// ... 只可以结构索引数组
$params = array_values($arr);
echo $user->$action(...$params);