
批改狀態(tài):合格
老師批語(yǔ):路由是任何框架都具體的基本功能, http請(qǐng)求通過(guò)路由發(fā)送
第一種:http://php.edu/route/demo.php/a/b?p=1&m=3
第二種:http://php.edu/route/demo.php/a/b/p/1/m/3
<?php
echo $_SERVER['PATH_INFO'],'<br>';
echo $_SERVER['PHP_SELF'],'<br>';
echo $_SERVER['SERVER_ADDR'],'<br>';
echo $_SERVER['SERVER_NAME'],'<br>';
echo $_SERVER['REQUEST_METHOD'],'<br>';
echo $_SERVER['QUERY_STRING'],'<br>';
echo '<a href="demo2.php">顯示前一個(gè)頁(yè)面的url;$_SERVER[\'HTTP_REFERER\']</a>','<br>';
echo $_SERVER['SCRIPT_FILENAME'],'<br>';
echo $_SERVER['SCRIPT_NAME'],'<br>';
echo $_SERVER['SERVER_PORT'],'<br>';
echo $_SERVER['REQUEST_URI'],'<br>';
echo '<hr>';
echo print_r($_GET,true),'<br>';
echo implode(',', $_GET),'<br>';
vprintf('?p=%s&m=%s', $_GET);
echo '<br>';
// url類(lèi)型
echo 'url類(lèi)型:','<br>';
echo "第一種url:http://php.edu/route/demo.php/a/b?p=1&m=3",'<br>';
echo "第二種url:http://php.edu/route/demo.php/a/b/p/1/m/3",'<br>';
echo '<hr>';
echo '<h3>第一種url解析</h3>';
// 第一種路由解析
$cm=explode('/',$_SERVER['PATH_INFO']);
$cm=array_values(array_filter($cm));
// 解析出類(lèi)和方法
$method=array_pop($cm);//尾部出
$class=ucfirst(array_shift($cm));//頭部出
$params=$_SERVER['QUERY_STRING'];
// print_r($params);
parse_str($params,$agu);
// print_r(array_values($agu));
// $url=parse_url('http://php.edu/route/demo.php/a/b?p=1&m=3');
// 調(diào)用類(lèi)
class A
{
public function b($n,$m)
{
return sprintf('當(dāng)前類(lèi):%s<br>當(dāng)前方法:%s<br>當(dāng)前參數(shù):%s,%s',__CLASS__,__METHOD__,$n,$m);
}
}
$c=new $class();
echo $c->$method(...array_values($agu));
<?php
echo @$_SERVER['HTTP_REFERER'];
// url類(lèi)型
echo 'url類(lèi)型:','<br>';
echo "第一種url:http://php.edu/route/demo.php/a/b?p=1&m=3",'<br>';
echo "第二種url:http://php.edu/route/demo.php/a/b/p/1/m/3",'<br>';
echo '<hr>';
echo '<h3>第一種url解析</h3>';
// 第二種路由解析
// print_r($_SERVER['PATH_INFO']);
$cm=explode('/',$_SERVER['PATH_INFO']);
$cm=array_values(array_filter($cm));
// print_r($cm);
// 解析出類(lèi)和方法
$class=ucfirst(array_shift($cm));//頭部出
$method=array_shift($cm);//頭部出
//解析參數(shù)
$params=[];
for($i=0;$i<count($cm);$i+=2){
if(isset($cm[$i+1])){
$params[$cm[$i]]=$cm[$i+1];
}
}
// print_r($params);
// 調(diào)用類(lèi)
class A
{
public function b($n,$m)
{
return sprintf('當(dāng)前類(lèi):%s<br>當(dāng)前方法:%s<br>當(dāng)前參數(shù):%s,%s',__CLASS__,__METHOD__,$n,$m);
}
}
$c=new $class();
echo $c->$method(...array_values($params));
演示結(jié)果:
1、路由原理::將URL中的控制器,方法和參數(shù)解析出來(lái),映射到對(duì)應(yīng)的控制器類(lèi)和方法上
2、路由常用函數(shù):$_GET
獲取參數(shù)返回參數(shù)數(shù)組;$_SERVER['QUERY_STRING']
獲取參數(shù)組成的字符串,url地址中?后面的部分;$SERVER['PATH_INFO']
獲取路徑變量,跟在文件后面的變量例如php.edu/route/demo1.php/a/b 中的 /a/b
;array_filter()
過(guò)濾數(shù)組中的空值,array_values()把二維數(shù)組的值取出重排;array_shift()
從數(shù)組頭部取出一個(gè);parse_str($str,$array)
把一個(gè)查詢字符串解析成數(shù)組返回;explode('分割字符','字符串')
按分隔符把字符串解析成一個(gè)變量;ucfirst($str)
把字符串首字母大寫(xiě);
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)