亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        PHP實(shí)現(xiàn)路由映射到指定控制器

        字號:


            自定義路由的功能,指定到pathinfo的url上,再次升級之前的腳本 
            SimpleLoader.php
            <?php
            class SimpleLoader{
             public static function run($rules=array()){
             header("content-type:text/html;charset=utf-8");
             self::register();
             self::commandLine();
             self::router($rules);
             self::pathInfo();
             }
             //自動加載
             public static function loadClass($class){
             $class=str_replace('\\', '/', $class);
             $dir=str_replace('\\', '/', __DIR__);
             $class=$dir."/".$class.".php";
             if(!file_exists($class)){
              header("HTTP/1.1 404 Not Found");
             }
             require_once $class; 
             }
             //命令行模式
             public static function commandLine(){
             if(php_sapi_name()=="cli"){
              $_SERVER['PATH_INFO']="";
              foreach ($_SERVER['argv'] as $k=>$v) {
              if($k==0) continue;
              $_SERVER['PATH_INFO'].="/".$v;
              }
             }
             }
             //路由模式
             public static function router($rules){
             if(isset($_SERVER['PATH_INFO']) && !empty($rules)){
              $pathInfo=ltrim($_SERVER['PATH_INFO'],"/");
              foreach ($rules as $k=>$v) {
              $reg="/".$k."/i";
              if(preg_match($reg,$pathInfo)){
               $res=preg_replace($reg,$v,$pathInfo);
               $_SERVER['PATH_INFO']='/'.$res;
              }
              }
             }
             }
             //pathinfo處理
             public static function pathInfo(){
             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;
             if(method_exists($controller, $_GET['a'])){
              $controller=new $class;
              $controller->$_GET['a']();
             }else{
              header("HTTP/1.1 404 Not Found");
              echo "404";
             }
             }
             //致命錯誤回調(diào)
             public static function shutdownCallback(){
             $e=error_get_last();
             if(!$e) return;
             self::myErrorHandler($e['type'],'<font color="red">Fatal Error</font> '.$e['message'],$e['file'],$e['line']);
             }
             //錯誤處理
             protected static function myErrorHandler($errno,$errstr,$errfile,$errline){
             list($micseconds,$seconds)=explode(" ",microtime());
             $micseconds=round($micseconds*1000);
             $micseconds=strlen($micseconds)==1 ? '0'.$micseconds : $micseconds;
             if(php_sapi_name()=="cli"){
              $break="\r\n";
             }else{
              $break="<br/>";
             }
             $mes="[".date("Y-m-d H:i:s",$seconds).":{$micseconds}] ".$errfile." ".$errline." line ".$errstr.$break;
             echo $mes; 
             }
             //注冊
             public static function register(){
             error_reporting(0);
             set_error_handler(function($errno,$errstr,$errfile,$errline){
              self::myErrorHandler($errno,$errstr,$errfile,$errline);
             });
             register_shutdown_function(function(){
              self::shutdownCallback();
             });
             spl_autoload_register("self::loadClass");
             }
            } 
            如何使用
            index.php 
            <?php
            //路由映射
            $rules=array(
             '^user$'=>'User/User/getUserList',
             '^user\/(\d+)$'=>'User/User/getUserById/id/$1',
             '^user\/(\d+)\/article$'=>'User/User/getUserArticle/uid/$1'
            );
            require_once "SimpleLoader.php";
            SimpleLoader::run($rules); 
            控制器啥樣
            \Controller\User\User.php
            <?php
            namespace Controller\User;
            class User{
             public function getUserById(){
             echo "用戶信息id {$_GET['id']} 的信息";
             }
             public function getUserList(){
             echo "用戶列表";
             }
             public function getUserArticle(){
             echo "用戶id {$_GET['uid']} 的文章列表";
             }
            } 
            以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助