
批改狀態(tài):合格
老師批語:這個(gè)簡(jiǎn)單的案例, 可以讓我們快速理解路由的原理
示例
<?php
namespace Url;
class MyurlController
{
public function index()
{
return '調(diào)用了index方法!';
}
}
// $pathinfo = explode('/',$_SERVER['PATH_INFO']);
// //PATH_INFO取出網(wǎng)址/admin/admin888/action/index用explode轉(zhuǎn)為數(shù)組
// $pathinfo = array_filter($pathinfo);
// //array_filter過濾數(shù)組中的空值
// $pathinfo = array_values($pathinfo);
// //array_values對(duì)數(shù)組從0重新排列
$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
// 將網(wǎng)址轉(zhuǎn)換返回一個(gè)數(shù)組
// $pathinfo = array_pop($pathinfo);
// 取出數(shù)組最后一個(gè)鍵值
// $pathinfo =array_slice($pathinfo,-2,1);
//array_slice取出數(shù)組中倒數(shù)第二鍵值,參數(shù)1:數(shù)組,參數(shù)2:取出的位置,參數(shù)3:取出幾個(gè)值
// $pathinfo = array_shift($pathinfo);
//取出數(shù)組的值
// $pathinfo = ucfirst($pathinfo);
//ucfirst將鍵值第一個(gè)字母轉(zhuǎn)換大寫
$pathinfo = ucfirst(array_shift(array_slice($pathinfo,-2,1)));
//取出網(wǎng)址中的myurl將首字母轉(zhuǎn)換大寫
$controller = __NAMESPACE__.'\\'.$pathinfo.'Controller';
//取出的網(wǎng)址數(shù)組中的值和命名空間作為調(diào)用的類(生成解析控制器的類名稱)
$action = array_pop(explode('/',$_SERVER['PATH_INFO']));
//取出網(wǎng)址數(shù)組中最后一個(gè)值,作為調(diào)用的方法(生成解析控制器的類方法)
echo (new $controller)->$action();
//使用生成的控制器類名稱及方法調(diào)用類
示例圖:
示例:
<?php
namespace Url;
class Myurl
{
public function index($id,$name,$age,$mobile)
{
return '您的ID是:'.$id.'您的用戶名是:'.$name.'您的年齡是:'.$age.'您的手機(jī)是:'.$mobile;
}
}
$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
$controller = __NAMESPACE__ .'\\'.ucfirst(array_shift($pathinfo));
$action = array_shift($pathinfo);
// print_r($pathinfo);
$params =[];
for($i = 1 ; $i < count($pathinfo);$i+=2)
{
$params[$pathinfo[$i]] = $pathinfo[$i];
}
echo call_user_func_array([(new $controller),$action],$params);、
示例圖:
<?php
namespace Url;
class MyurlController
{
public $pathinfoClass;
public $pathinfoMethod;
public $params = [];
public function index($id,$name,$age,$mobile)
{
return 'Url傳值無鍵調(diào)用類:用戶ID:'.$id.' 用戶姓名:'.$name.' 用戶年齡:'.$age.' 用戶手機(jī):'.$mobile;
}
public function getClass($pathinfo)
{
$this->pathinfoClass = array_shift(array_splice($pathinfo,-2,1));
$this->pathinfoClass = __NAMESPACE__.'\\'. ucfirst($this->pathinfoClass).'Controller';
return $this->pathinfoClass;
}
public function getMethod($pathinfo)
{
$this->pathinfoMethod = array_pop($pathinfo);
return $this->pathinfoMethod;
}
public function getDate($pathinfo)
{
$pathinfo =array_slice($pathinfo,0,4);
for($i = 0 ;$i < count($pathinfo);$i++)
{
$this->params[$pathinfo[$i]] = $pathinfo[$i];
}
return $this->params;
}
}
$pathinfo = array_values(array_filter(explode('/',$_SERVER['PATH_INFO'])));
$pathinfoClass = (new MyurlController)->getClass($pathinfo);
$pathinfoMethod = (new MyurlController)->getMethod($pathinfo);
$params =(new MyurlController)->getDate($pathinfo);
echo call_user_func_array([(new $pathinfoClass),$pathinfoMethod],$params);
示例圖:
微信掃碼
關(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)