查询GET字符串方式
<?php
// 查询GET字符串
//如:http://127.0.0.7/route.php?action=edit&id=10&name=admin
//方法一:
if($_GET):
vprintf('?action=%s&id=%s&name=%s',$_GET);
endif;
echo '<hr>';
//方法二,
//中文:查询_字符串
echo $_SERVER['QUERY_STRING'];
echo '<hr>';
//查询路径参数
//如:http://127.0.0.7/route.php/action/edit/id/10/name/admin
//方法:PATH_INFO(路径_信息)
echo $_SERVER['PATH_INFO'];
echo '<hr>';
//path_info()函数。跟路径变量不同,返回的是路径信息不是变量
print_r(pathinfo('0514/route.php'));
echo '<hr>';
//$_SERVER['REQUEST_URI'] 统一资源定位符(可以是GET,也可以PATH_INFO;
echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo '<hr>';
//http://域名/控制器/方法/参数/值/.....(这里要特别注意:控制器名称和类名称对应。方法名称和类中方法名称也是对应的)
class Action
{
public $id;
public $name;
public function edit($id,$name)
{
$this->id = $id;
$this->name = $name;
}
}
//1,过滤空数组arra_filter
//array_values() 返回 input 数组中所有的值并给其建立数字索引
$pathinfo=array_filter(array_filter(explode('/',$_SERVER['PATH_INFO'])));
//print_r($pathinfo);
//,2,解析控制器 。初始数据
//$user=$pathinfo['0'];
$user=ucfirst(array_shift($pathinfo));
//ucfirst首字母大写
//echo $user;
//3,解析方法同上
$edit=array_shift($pathinfo);
//echo $edit;
//parse_str — 将字符串解析成多个变量
//,4,解析参数 //如果是PATH_INF这里改掉就可以了
parse_str($_SERVER['PATH_INFO'],$params);
//print_r($params);
//5,调用控制器==>已经解析到(2方法)
$user= new $user();
//调用方法==>已经解析到(3方法),传参==>(4参数)
$user->$edit(...array_values($params));
echo $user->id;
echo $user->name;
path_info方式
<?php
class Action
{
public $id;
public $name;
public function edit($id,$name)
{
$this->id = $id;
$this->name = $name;
}
}
//1,过滤空数组
$pathinfo=array_filter(array_filter(explode('/',$_SERVER['PATH_INFO'])));
//,2,解析控制器 。初始数据
$user=ucfirst(array_shift($pathinfo));
//ucfirst首字母大写
//3,解析方法同上
$edit=array_shift($pathinfo);
//,4,解析参数
parse_str($_SERVER['PATH_INFO'],$params);
//print_r($params);
//5,调用控制器
$user= new $user();
//传入过滤空数组的数组
$user->$edit(...array_values($pathinfo));
echo $user->id;
echo $user->name;
总结:调用控制器这里有比较懵。跨度太大了。