国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 PHP MVC框架核心類

PHP MVC框架核心類

Nov 22, 2016 pm 02:56 PM
框架

PHP MVC框架核心類?
現(xiàn)在我們舉幾個核心框架的例子演示:在framework/core下建立一個Framework.class.php的文件。寫入以下代碼:?

// framework/core/Framework.class.php?
class Framework {?
?? public static function run() {?
?????? echo "run()";?
?? }?

require "framework/core/Framework.class.php";
Framework::run();
你可以在你的瀏覽器里訪問index.php看到結(jié)果。通常這個靜態(tài)方法被命名為run()或者bootstrap()。在這個方法中,我們要做3件最主要的事情:

class Framework {
public static function run() {
// echo "run()";
self::init();
self::autoload();
self::dispatch();
}
private static function init() {
}
private static function autoload() {
}
private static function dispatch() {
}
}
初始化
init()方法:

// Initialization

private static function init() {

// Define path constants

define("DS", DIRECTORY_SEPARATOR);

define("ROOT", getcwd() . DS);

define("APP_PATH", ROOT . 'application' . DS);

define("FRAMEWORK_PATH", ROOT . "framework" . DS);

define("PUBLIC_PATH", ROOT . "public" . DS);

define("CONFIG_PATH", APP_PATH . "config" . DS);

define("CONTROLLER_PATH", APP_PATH . "controllers" . DS);

define("MODEL_PATH", APP_PATH . "models" . DS);

define("VIEW_PATH", APP_PATH . "views" . DS);

define("CORE_PATH", FRAMEWORK_PATH . "core" . DS);

define('DB_PATH', FRAMEWORK_PATH . "database" . DS);

define("LIB_PATH", FRAMEWORK_PATH . "libraries" . DS);

define("HELPER_PATH", FRAMEWORK_PATH . "helpers" . DS);

define("UPLOAD_PATH", PUBLIC_PATH . "uploads" . DS);

// Define platform, controller, action, for example:

// index.php?p=admin&c=Goods&a=add

define("PLATFORM", isset($_REQUEST['p']) ? $_REQUEST['p'] : 'home');

define("CONTROLLER", isset($_REQUEST['c']) ? $_REQUEST['c'] : 'Index');

define("ACTION", isset($_REQUEST['a']) ? $_REQUEST['a'] : 'index');

define("CURR_CONTROLLER_PATH", CONTROLLER_PATH . PLATFORM . DS);

define("CURR_VIEW_PATH", VIEW_PATH . PLATFORM . DS);

// Load core classes

require CORE_PATH . "Controller.class.php";

require CORE_PATH . "Loader.class.php";

require DB_PATH . "Mysql.class.php";

require CORE_PATH . "Model.class.php";


// Load configuration file
$GLOBALS['config'] = include CONFIG_PATH . "config.php";
// Start session
session_start();
}
在注釋中你可以看到每一步的目的。

自動加載
在項目中,我們不想在腳本中想使用一個類的時候手動的去include或者require加載,這就是為什么PHP MVC框架都有自動加載的功能。例如,在symfony中,如果你想要加載lib下的類,它將會被自動引入。很神奇是吧?現(xiàn)在讓我們在自己的框架中加入自動加載的功能。

這里我們要用的PHP中的自帶函數(shù)spl_autoload_register:

// Autoloading

private static function autoload(){

spl_autoload_register(array(__CLASS__,'load'));
}

// Define a custom load method
private static function load($classname){

// Here simply autoload app’s controller and model classes

if (substr($classname, -10) == "Controller"){

// Controller

require_once CURR_CONTROLLER_PATH . "$classname.class.php";

} elseif (substr($classname, -5) == "Model"){

// Model

require_once MODEL_PATH . "$classname.class.php";
}
}
每一個框架都有自己的命名規(guī)則,我們的也不例外。對于一個控制器類,它需要被命名成類似xxxController.class.php,對于一個模型類,需要被命名成xxModel.class.php。為什么在使用一個框架的時候你需要遵守它的命名規(guī)則呢?自動加載就是一條原因。

路由/分發(fā)
// Routing and dispatching

private static function dispatch(){

// Instantiate the controller class and call its action method

$controller_name = CONTROLLER . "Controller";

$action_name = ACTION . "Action";

$controller = new $controller_name;

$controller->$action_name();?

}?
在這步中,index.php將會分發(fā)請求到對應的Controller::Aciton()方法中。?

基礎(chǔ)Controller類?
通常在框架的核心類中都有一個基礎(chǔ)的控制器。在symfony中,被稱為sfAction;在iOS中,被稱為UIViewController。在這里我們命名為Controller,在framework/core下建立Controller.class.php?
// Base Controller
class Controller{
// Base Controller has a property called $loader, it is an instance of Loader class(introduced later)
protected $loader;
public function __construct(){
$this->loader = new Loader();?
??? }?
??? public function redirect($url,$message,$wait = 0){?
??????? if ($wait == 0){?
??????????? header("Location:$url");?
??????? } else {?
??????????? include CURR_VIEW_PATH . "message.html";?
??????? }?
??????? exit;?
??? }?
}?
基礎(chǔ)控制器有一個變量$loader,它是Loader類的實例化(后面介紹)。準確的說,$this->loader是一個變量指向了被實例化的Load類。在這里我不過多的討論,但是這的確是一個非常關(guān)鍵的概念。我遇到過一些PHP開發(fā)者相信在這個語句之后:?
$this->loader = new Loader();?
$this->load是一個對象。不,它只是一個引用。這是從Java中開始使用的,在Java之前,在C++和Objective C中被稱為指針。引用是個封裝的指針類型。比如,在iOS(O-C)中,我們創(chuàng)建了一個對象:?
UIButton *btn = [UIButton alloc] init];?
加載類?
在framework.class.php中,我們已經(jīng)封裝好了應用的控制器和模型的自動加載。但是如何自動加載在framework目錄中的類呢?現(xiàn)在我們可以新建一個Loader類,它會加載framework目錄中的類和函數(shù)。當我們加載framework類時,只需要調(diào)用這個Loader類中的方法即可。?
class Loader{?
??? // Load library classes?
??? public function library($lib){?
??????? include LIB_PATH . "$lib.class.php";?
??? }?
??? // loader helper functions. Naming conversion is xxx_helper.php;?
??? public function helper($helper){?
??????? include HELPER_PATH . "{$helper}_helper.php";?
??? }?
}

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何評估Java框架商業(yè)支持的性價比 如何評估Java框架商業(yè)支持的性價比 Jun 05, 2024 pm 05:25 PM

評估Java框架商業(yè)支持的性價比涉及以下步驟:確定所需的保障級別和服務水平協(xié)議(SLA)保證。研究支持團隊的經(jīng)驗和專業(yè)知識??紤]附加服務,如升級、故障排除和性能優(yōu)化。權(quán)衡商業(yè)支持成本與風險緩解和提高效率。

Java框架的性能比較 Java框架的性能比較 Jun 04, 2024 pm 03:56 PM

根據(jù)基準測試,對于小型、高性能應用程序,Quarkus(快速啟動、低內(nèi)存)或Micronaut(TechEmpower優(yōu)異)是理想選擇。SpringBoot適用于大型、全棧應用程序,但啟動時間和內(nèi)存占用稍慢。

PHP 框架的學習曲線與其他語言框架相比如何? PHP 框架的學習曲線與其他語言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學習曲線取決于語言熟練度、框架復雜性、文檔質(zhì)量和社區(qū)支持。與Python框架相比,PHP框架的學習曲線更高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學習曲線中等,但入門時間較短。

PHP 框架的輕量級選項如何影響應用程序性能? PHP 框架的輕量級選項如何影響應用程序性能? Jun 06, 2024 am 10:53 AM

輕量級PHP框架通過小體積和低資源消耗提升應用程序性能。其特點包括:體積小,啟動快,內(nèi)存占用低提升響應速度和吞吐量,降低資源消耗實戰(zhàn)案例:SlimFramework創(chuàng)建RESTAPI,僅500KB,高響應性、高吞吐量

Java框架學習路線圖:不同領(lǐng)域中的最佳實踐 Java框架學習路線圖:不同領(lǐng)域中的最佳實踐 Jun 05, 2024 pm 08:53 PM

針對不同領(lǐng)域的Java框架學習路線圖:Web開發(fā):SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務端響應式編程:ReactorCore和SpringWebFlux。實時計算:ApacheStorm和ApacheSpark。云計算:AWSSDKforJava和GoogleCloudJava。

golang框架文檔最佳實踐 golang框架文檔最佳實踐 Jun 04, 2024 pm 05:00 PM

編寫清晰全面的文檔對于Golang框架至關(guān)重要。最佳實踐包括:遵循既定文檔風格,例如Google的Go編碼風格指南。使用清晰的組織結(jié)構(gòu),包括標題、子標題和列表,并提供導航。提供全面準確的信息,包括入門指南、API參考和概念。使用代碼示例說明概念和使用方法。保持文檔更新,跟蹤更改并記錄新功能。提供支持和社區(qū)資源,例如GitHub問題和論壇。創(chuàng)建實際案例,如API文檔。

如何為不同的應用場景選擇最佳的golang框架 如何為不同的應用場景選擇最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根據(jù)應用場景選擇最佳Go框架:考慮應用類型、語言特性、性能需求、生態(tài)系統(tǒng)。常見Go框架:Gin(Web應用)、Echo(Web服務)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。實戰(zhàn)案例:構(gòu)建RESTAPI(Fiber),與數(shù)據(jù)庫交互(gorm)。選擇框架:性能關(guān)鍵選fasthttp,靈活Web應用選Gin/Echo,數(shù)據(jù)庫交互選gorm。

Golang框架學習過程中常見的誤區(qū)有哪些? Golang框架學習過程中常見的誤區(qū)有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學習的誤區(qū)有以下5種:過度依賴框架,限制靈活性。不遵循框架約定,代碼難維護。使用過時庫,帶來安全和兼容性問題。過度使用包,混淆代碼結(jié)構(gòu)。忽視錯誤處理,導致意外行為和崩潰。

See all articles