PHP url的pathinfo模式加载不同控制器的简单实现
内容摘要
使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式
文件结构:
|--Controller
|--Index
|--Index.php
|--Application.php
文件结构:
|--Controller
|--Index
|--Index.php
|--Application.php
文章正文
使用自动加载和解析url的参数,实现调用到不同的控制器,实现了pathinfo模式和普通的url模式
文件结构:
|--Controller
|--Index
|--Index.php
|--Application.php
Application.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?php class Application{ public static function main(){ header( "content-type:text/html;charset=utf-8" ); self::register(); self::router(); } public static function register(){ spl_autoload_register( "self::loadClass" ); } public static function loadClass( $class ){ $class = str_replace ( '\\' , '/' , $class ); $class = "./" . $class . ".php" ; require_once $class ; } public static function router(){ if (isset( $_SERVER [ 'PATH_INFO' ])){ $pathinfo = array_filter ( explode ( "/" , $_SERVER [ 'PATH_INFO' ])); for ( $i =1; $i <= count ( $pathinfo ); $i ++){ $key =isset( $pathinfo [ $i ]) ? $pathinfo [ $i ] : '' ; $value =isset( $pathinfo [ $i +1]) ? $pathinfo [ $i +1] : "" ; switch ( $i ) { case 1: $_GET [ 'm' ]=ucfirst( $key ); break ; case 2: $_GET [ 'c' ]=ucfirst( $key ); break ; case 3: $_GET [ 'a' ]= $key ; break ; default : if ( $i >3){ if ( $i %2==0){ $_GET [ $key ]= $value ; } } break ; } } } $_GET [ 'm' ]=! empty ( $_GET [ 'm' ]) ? ucfirst( $_GET [ 'm' ]) : 'Index' ; $_GET [ 'c' ]=! empty ( $_GET [ 'c' ]) ? ucfirst( $_GET [ 'c' ]) : 'Index' ; $_GET [ 'a' ]=! empty ( $_GET [ 'a' ]) ? $_GET [ 'a' ] : 'index' ; $class = "\\Controller\\{$_GET['m']}\\{$_GET['c']}" ; $controller = new $class ; $controller -> $_GET [ 'a' ](); } } Application::main(); |
\Controller\Index\Index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php namespace Controller\Index; use Service\User; class Index{ public function __construct(){ echo "构造方法<br/>" ; } public function index(){ new User(); print_r( $_GET ); } public function login(){ echo "login()" ; } } |
效果:
以上这篇PHP url的pathinfo模式加载不同控制器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持phpstudy。
代码注释