激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP實現的簡單路由和類自動加載功能

PHP實現的簡單路由和類自動加載功能

2019-10-18 13:16程序分子 PHP教程

這篇文章主要介紹了PHP實現的簡單路由和類自動加載功能,結合實例形式分析了php路由及類自動加載的原理與相關實現技巧,需要的朋友可以參考下

本文實例講述了PHP實現的簡單路由自動加載功能。分享給大家供大家參考,具體如下:

項目目錄如下

入口文件index.php

<?php
define('WEBROOT', 'C:/Users/Administrator/Documents/NetBeansProjects/test');
require_once(WEBROOT.'/core/environment.php');
core__app::run(); //

類自動加載文件environment.php

<?php
//根據類名來include文件
class loader {
  //找到對應文件就include
  static function load($name) {
    $file = self::filepath($name);
    if ($file) {
      return include $file;
    }
  }
  static function filepath($name, $ext = '.php') {
    if (!$ext) {
      $ext = '.php';
    }
    $file = str_replace('__', '/', $name) . $ext; //類名轉路徑
    $path .= WEBROOT . '/' . $file;
    if (file_exists($path)) {
      return $path; //找到就返回
    }
    return null;
  }
}
spl_autoload_register('loader::load');

我這里類的加載規則是 比如core__app::run() 對應 根目錄/core/app.php 的 run()方法,用到了spl_autoload_register()函數實現自動加載,當調用某個類名的時候,會自動執行spl_autoload_register('loader::load'),根據類名include對應的類文件。

app.php入口文件執行的方法開始跑框架流程

<?php
class core__app {
  static function run() {
    $a = $_SERVER['REQUEST_URI'];
    $uri = rtrim(preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']), '/');
    $params = explode('/', trim($uri, '/'));
    $count = count($params);
    if ($count > 1) {
      $controller = $params[0];
      $method = $params[1];
    } elseif ($count == 1) {
      $controller = 'index';
      $method = $params[0];
    } else {
    }
    $filename = WEBROOT . '/controller/' . $controller . '.php';
    $controller = 'controller__'.$controller;
    try {
      if (!file_exists($filename)) {
        throw new Exception('controller ' . $controller . ' is not exists!');
        return;
      }
      include($filename);
      if (!class_exists($controller)) {
        throw new Exception('class ' . $controller . ' is not exists');
        return;
      }
      $obj = new ReflectionClass($controller);
      if (!$obj->hasMethod($method)) {
        throw new Exception('method ' . $method . ' is not exists');
        return;
      }
    } catch (Exception $e) {
      echo $e; //展示錯誤結果
      return;
    }
    $newObj = new $controller();
    call_user_func_array(array($newObj, $method), $params);
  }
}

根據請求uri去找對應的controller, 用call_user_func_array()的方式調用controller里的方法

根目錄/controller/test.php

<?php
class controller__test {
  public function write($controller, $method) {
    //config__test::load('test');
    model__test::write($controller, $method);
  }
}

這里其實調用不一定要調用model里的test方法,可以調model目錄下的任意文件,在此之前可以去都讀一些config文件等等操作。

根目錄/model/test.php

<?php
class model__test {
  public function write($model, $method) {
    echo 'From controller:'.$model.' to model: ' . $model . ' ,method: ' . $method;
  }
}

例如hostname/test/write 這個請求就會從入口文件進來,經過core__app::run就會找到controller下對應的的controller__test類,執行write()方法

希望本文所述對大家PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国外成人在线视频网站 | 婷婷久久综合九色综合色多多蜜臀 | 国产乱淫a∨片免费视频 | 久久精品视频免费 | 精品一区二区免费 | 爽爽淫人综合网网站 | 国产亚洲精品久久 | 国产免费专区 | 欧美三级欧美成人高清www | 国产精品久久久久国产精品三级 | 日韩视频一区二区在线观看 | 日韩a毛片免费观看 | 日韩精品中文字幕在线观看 | 欧美日韩高清一区 | 久久精品超碰 | 精品亚洲视频在线观看 | 羞羞视频.www在线观看 | 久久国产成人精品国产成人亚洲 | 久久久久久久九九九九 | 永久免费黄色片 | 又黄又爽免费无遮挡在线观看 | 久久久久成人精品免费播放 | 国产亚洲精品久久久久久大师 | 亚州精品天堂中文字幕 | 亚洲成人福利网站 | 羞羞视频免费观看网站 | 黄色免费av网站 | 欧美精品国产综合久久 | 精品在线观看一区 | 免费a级毛片大学生免费观看 | 国产精品1区 | 黄色视频a级毛片 | 久久久激情网 | 欧美日韩高清在线观看 | 色阁阁69婷婷 | 欧美视频在线观看一区 | 欧美一级α | 午夜精品久久久久久中宇 | av免费提供 | 密室逃脱第一季免费观看完整在线 | 毛片视频网站在线观看 |