php原生路,基於原生PHP的路由分配實現

對於由原生PHP寫成的獨立PHP框架,利用單一入口文件實現路徑的訪問。這時我們會遇到的首要問題是:文件的相互包含,其次就是路由分配。當我們不利用成熟的PHP框架進行web開發時,我們就會發現上述兩個問題會是很困擾我們的問題所在。

問題解決方案:

1、文件包含

php的文件包含有兩種方式:require和include,兩個方法的區別在於利用require包含文件當出錯時,會報出嚴重錯誤,同時PHP腳本會停止運行;而利用include包含文件出錯時,會有警告,但PHP腳本仍然會繼續向下執行。同時兩個方法都包含對應的xxx_once方法,可以避免”declare class”的問題。所以一般使用文件包含的時候我們盡量使用include_once包含文件。

同時在關於文件包含的路徑問題上,我們可以利用設置全局變量的方式,依托入口文件的絕對路徑,去尋找其他路徑文件。修改php.ini中的inclue_path路徑當然也是另一種方式,利用require和include包含文件,假如是相對路徑的方式,首先會根據php.ini配置文件中的include_path的設置尋找。

2、路由分配

基於php的路由分配,實質上來說就是利用url中的path去匹配對應的控制類,同時調用其中的方法進行相關操作的處理。

一言不合上代碼:<?php

/**

* Author:helen

* CreateTime: 2016/07/27 10:26

* Description:

*/

// 權限控制

include_once './auth.php';

// 應用入口文件

date_default_timezone_set("Asia/Shanghai");

header('Content-type: text/html;charset=utf-8');

// 項目根路徑

define('BASEPATH', dirname(__FILE__));

// 調試模式

define('APP_DEBUG', True);

// 引入配置文件

include_once BASEPATH . '/config/config.php';

// 路由控制

$router = include_once BASEPATH . '/config/router.php';

if ($_SERVER['HTTP_HOST'] !== 'xxx.com') {

var_dump('當前host不被允許');

} else {

$request_path = str_replace('/index.php', '', $_SERVER['PHP_SELF']);

$request_query = getCurrentQuery();

if (array_key_exists($request_path, $router)) {

$module_file = BASEPATH . $router[$request_path]['file_name'];

$class_name = $router[$request_path]['class_name'];

$method_name = $router[$request_path]['method_name'];

if (file_exists($module_file)) {

include $module_file;

$obj_module = new $class_name();

if (!method_exists($obj_module, $method_name)) {

die("要調用的方法不存在");

} else {

if (is_callable(array($obj_module, $method_name))) {

$obj_module->$method_name($request_query, $_POST);

}

}

} else {

die("定義的模塊不存在");

}

} else {

echo '頁面不存在';

}

}

利用上述方式就可實現基本的PHP框架的路由分配。

期待更好的方式,期待更多的交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值