<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                #### 路由類 上一章寫了運行時要執行的一些函數,設置響應頭部等,接下來就要實例化路由了,這里需要一個路由類``Route`` 上一章的``run()``函數的最后,實例化了路由類,下面給出路由類的詳細代碼: ~~~ <?php namespace S; class Route{ private $module; //當前模塊 private $controller; //當前控制器 private $action; //當前方法 public function __construct(){ $this->parseUrl();//解析路由,獲得模塊,控制器和操作 $this->newAction(); //實例化控制器,并執行對應方法 } public function parseUrl(){ $this->module = isset($_GET[C('module_name')]) ? $_GET[C('module_name')] : C('default_module'); $this->controller = isset($_GET[C('controller_name')]) ? $_GET[C('controller_name')] : C('default_controller'); $this->action = isset($_GET[C('action_name')]) ? $_GET[C('action_name')] : C('default_action'); } public function newAction(){ $path = APP_PATH . $this->module . '/Controller/' .$this->controller . 'Controller.php'; //把模塊名和控制器名鏈接成字符串,作為控制器的真實文件路徑 if (file_exists($path)){ //如果這個文件存在,就通過模塊名和控制器名拼接成命名空間的路徑 $controllerName = '\\' . $this->module . '\\' . $this->controller . 'Controller'; }else{ throw new S_Exception($controllerName . '控制器類文件不存在'); } if (class_exists($controllerName)){ //然后判斷這個命名空間下的類是否存在,存在的話,就實例化這個控制器類 $controllerObj = new $controllerName; }else{ throw new S_Exception($controllerName . '控制器類不存在,請檢查類名或命名空間'); } if (method_exists($controllerName,$this->action)){ //判斷這個控制器中是否存在這個方法,如果存在的話,就執行這個方 $controllerObj->{$this->action}(); }else{ throw new S_Exception($this->action . '方法不存在'); } } } ~~~ 以上就是這個路由類的代碼,很好理解,首先,在核心運行類中new了一個Route類,自動調用構造函數,構造函數先調用了``parseUrl()``的解析``url``的方法,先在配置文件中添加如下配置項: ~~~ 'module_name' =>'m', //默認模塊參數名 index.php?m=Home&c=Index&a=index 'default_module' =>'Home', //默認模塊參數值 'controller_name' =>'c', //默認控制器參數名 'default_controller'=>'Index', //默認控制器參數值 'action_name'=>'a', //默認方法參數名 'default_action'=>'index', //默認方法參數值 ~~~ 這樣,在``parseUrl``中,首先用``$_GET[]``分別獲取到當前的模塊、控制器、方法的值,如果url中沒有,就使用默認的配置文件中的值,并把它賦值給相應的變量。 然后,構造函數又調用了``newAction()``方法,把獲取到的這三個值拼接成控制器文件的字符串路徑,如果這個路徑對應的文件存在,那就再次根據模塊名和控制器名,拼接出這個控制器的命名空間,然后去判斷這個命名空間下是否存在這個類,如果存在,證明我們找到了這個類,就去實例化這個類,實例化之后,就去判斷這個類中是否存在需要調用的方法,如果存在,那么就正式的去調用這個類,至此,整個PHP執行流程結束。 #### 很簡單吧?其實把框架掰開了揉碎了看,就那么幾個步驟,只要自己試著寫寫,很容易就明白的 ##### 上面的代碼中用到了``S_Exception``類,這是一個自定義的異常類,下一節會講到。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看