您好,登錄后才能下訂單哦!
對(duì)于由原生PHP寫(xiě)成的獨(dú)立PHP框架,利用單一入口文件實(shí)現(xiàn)路徑的訪問(wèn)。這時(shí)我們會(huì)遇到的首要問(wèn)題是:文件的相互包含,其次就是路由分配。當(dāng)我們不利用成熟的PHP框架進(jìn)行web開(kāi)發(fā)時(shí),我們就會(huì)發(fā)現(xiàn)上述兩個(gè)問(wèn)題會(huì)是很困擾我們的問(wèn)題所在。
問(wèn)題解決方案:
1、文件包含
php的文件包含有兩種方式:require和include,兩個(gè)方法的區(qū)別在于利用require包含文件當(dāng)出錯(cuò)時(shí),會(huì)報(bào)出嚴(yán)重錯(cuò)誤,同時(shí)PHP腳本會(huì)停止運(yùn)行;而利用include包含文件出錯(cuò)時(shí),會(huì)有警告,但PHP腳本仍然會(huì)繼續(xù)向下執(zhí)行。同時(shí)兩個(gè)方法都包含對(duì)應(yīng)的xxx_once方法,可以避免”declare class”的問(wèn)題。所以一般使用文件包含的時(shí)候我們盡量使用include_once包含文件。
同時(shí)在關(guān)于文件包含的路徑問(wèn)題上,我們可以利用設(shè)置全局變量的方式,依托入口文件的絕對(duì)路徑,去尋找其他路徑文件。修改php.ini中的inclue_path路徑當(dāng)然也是另一種方式,利用require和include包含文件,假如是相對(duì)路徑的方式,首先會(huì)根據(jù)php.ini配置文件中的include_path的設(shè)置尋找。
2、路由分配
基于php的路由分配,實(shí)質(zhì)上來(lái)說(shuō)就是利用url中的path去匹配對(duì)應(yīng)的控制類(lèi),同時(shí)調(diào)用其中的方法進(jìn)行相關(guān)操作的處理。
一言不合上代碼:
<?php /** * Author:helen * CreateTime: 2016/07/27 10:26 * Description: */ // 權(quán)限控制 include_once './auth.php'; // 應(yīng)用入口文件 date_default_timezone_set("Asia/Shanghai"); header('Content-type: text/html;charset=utf-8'); // 項(xiàng)目根路徑 define('BASEPATH', dirname(__FILE__)); // 調(diào)試模式 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('當(dāng)前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("要調(diào)用的方法不存在"); } else { if (is_callable(array($obj_module, $method_name))) { $obj_module->$method_name($request_query, $_POST); } } } else { die("定義的模塊不存在"); } } else { echo '頁(yè)面不存在'; } }
利用上述方式就可實(shí)現(xiàn)基本的PHP框架的路由分配。
以上就是PHP簡(jiǎn)單實(shí)現(xiàn)路由Route功能的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。