国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

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

2024-05-05 00:02:39
字體:
來源:轉載
供稿:網友

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

項目目錄如下

入口文件index.php

<?phpdefine('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入口文件執行的方法開始跑框架流程

<?phpclass 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

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

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

根目錄/model/test.php

<?phpclass 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程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 界首市| 米易县| 色达县| 大化| 林甸县| 曲沃县| 德江县| 小金县| 阜康市| 芮城县| 北宁市| 上饶市| 安顺市| 新泰市| 安丘市| 广丰县| 东安县| 玉山县| 翁牛特旗| 北碚区| 红河县| 东山县| 蛟河市| 微山县| 镇坪县| 福安市| 龙山县| 中阳县| 全椒县| 宿迁市| 湖南省| 太白县| 荥经县| 韶山市| 金湖县| 蓝山县| 盐津县| 长治县| 柘荣县| 龙泉市| 柘荣县|