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

首頁 后端開發(fā) php教程 理解PHP中的MVC框架編程_PHP教程

理解PHP中的MVC框架編程_PHP教程

Jul 15, 2016 pm 01:25 PM
model mvc php 什么 可以 框架 理解 編程

什么是MVC

MVC是一個(gè)可以讓你把“三個(gè)部分(即MVC的全稱,Model、 View、Controller)”諧調(diào)地組成一個(gè)復(fù)雜應(yīng)用程序的概念。一輛汽車就是一個(gè)在現(xiàn)實(shí)生活中非常好的MVC例子。我們看車都看兩個(gè)View(顯 示)部分:內(nèi)部和外部。而這兩個(gè)都離不開一個(gè)Controller(控制者):司機(jī)。剎車系統(tǒng)、方向盤和其他操控系統(tǒng)代表了Model(模型):他們從司 機(jī)(Controller)那里取得控制方法然后應(yīng)用到內(nèi)部和外觀(View)。

網(wǎng)絡(luò)上的MVC

MVC框架所涵蓋的概念相當(dāng)簡單并且極度靈活。基本的概念就是,你有一個(gè)單獨(dú)的控制器(如index.php)用來控制所有建立在參數(shù)請求基礎(chǔ)上的框架內(nèi)應(yīng)用程序。這個(gè)控制器通常包含了(最小程度上)一個(gè)定義模型的參數(shù)、一個(gè)事件和一個(gè)GET參數(shù)。這樣控制器就能確認(rèn)所有的請求然后運(yùn)行相應(yīng)的事件。打個(gè) 比方來說,一個(gè)像這樣/index.php?module=foo&event=bar的請求很有可能就是用來載入一個(gè)名叫foo的類,然后運(yùn)行 foo::bar()[就是其中的bar()函數(shù)]。這樣做的好處有:

一個(gè)對應(yīng)所有應(yīng)用程序的接口

同時(shí)維護(hù)一個(gè)應(yīng)用程序內(nèi)無數(shù)的代碼非常麻煩,因?yàn)槊恳欢未a都有自己的相對路徑、數(shù)據(jù)庫鏈接、驗(yàn)證等等。而這樣做就免除你在這方面的煩惱,允許你合并并重復(fù)使用代碼

為什么要?jiǎng)?chuàng)建自己的MVC框架

迄今為止,我沒有見到過太多用PHP寫的MVC框架。事實(shí)上我僅僅知道一個(gè)-Solar,是完全用PHP5寫的。另外一個(gè)是Cake,一個(gè)試圖成為 PHP的RoR(Ruby on Rails-一個(gè)Ruby語言開源網(wǎng)絡(luò)框架)。我自己對這兩個(gè)框架都有一些不滿意的地方:它們都沒有利用到PEAR,Smarty等所包含的現(xiàn)有代碼;現(xiàn) 在的Cake還比較紊亂;最后,Solar是一個(gè)絕大部分由一個(gè)人寫的作品(我無意說其作者Paul不是一個(gè)好人或者好程序員)。這些問題可能并不會(huì)讓你 否認(rèn)它們,而且很有可能你根本不關(guān)心這些問題。但是正因?yàn)槿绱耍艺埜魑槐M可能地審視它們。

老方式

如果回到2001看自己寫的代碼,作者有可能找到一個(gè)叫template.txt的文件,它看起來像這樣:

<?php require_once('config.php'); // Other requires, DB info, etc. $APP_DB = 'mydb';$APP_REQUIRE_LOGIN = false; // Set to true if script requires login$APP_TEMPLATE_FILE = 'foo.php'; // Smarty template$APP_TITLE = "My Application"; if ($APP_REQUIRE_LOGIN == true) {if (!isset($_SESSION['userID'])) {header("Location: /path/to/login.php");exit();}} $db = DB::connect('mysql://'.$DB_USER.':'.$DB_PASS.'@localhost/'.$APP_DB);if (!PEAR::isError($db)) {$db->setFetchMode(DB_FETCHMODE_ASSOC);} else {die($db->getMessage());} // Put your logic here // Output the templateinclude_once(APP_TEMPLATE_PATH.'/header.php');include_once(APP_TEMPLATE_PATH.'/'.$APP_TEMPLATE_FILE);include_once(APP_TEMPLATE_PATH.'/footer.php'); ?>

只是看這些代碼都會(huì)讓我有退縮的欲望。這段代碼的概念就是確保每一個(gè)應(yīng)用程序都能適用于這個(gè)處理方法,比如我可以簡單地將 template.txt拷進(jìn)myapp.php,改變一些變量,瞧,它就能運(yùn)行起來了。盡管如此,這個(gè)組織嚴(yán)密的處理方法存在一些嚴(yán)重的缺點(diǎn):

如果我的老板想讓作者用myapp.php在一些情況下輸出PDF、一些情況下輸出HTML、一些情況下(直接提交的XML請求)SOAP,我該怎么辦?

如果這個(gè)應(yīng)用程序需要IMAP或LDAP驗(yàn)證,我該怎么辦?

我該如何處理各種不同的代碼(包括編輯、升級和刪除)?

我該如何處理多級驗(yàn)證(管理員 vs. 非管理員)?

我該如何啟用輸出緩存?

新方式

將所有東西都扔進(jìn)這個(gè)MVC框架,你會(huì)發(fā)現(xiàn)生活是如此簡單。請對比以下代碼:

<?php class myapp extends FR_Auth_User{public function __construct(){parent::__construct();} public function __default(){// Do something here} public function delete(){ } public function __destruct(){parent::__destruct();}} ?>

注意這段代碼顯然不是用來鏈接到一個(gè)數(shù)據(jù)庫、判斷一個(gè)用戶是否已經(jīng)登陸、或者輸出任何其他信息??刂破髡莆樟怂械囊磺?。

如果我想驗(yàn)證LDAP,我可以建立FR_Auth_LDAP??刂破骺梢宰R別某些輸出方法(比如$_GET['output'])并可以隨時(shí)轉(zhuǎn)換成 PDF或者SOAP。事件處理delete,只負(fù)責(zé)刪除,其他的它都不管。因?yàn)檫@個(gè)模塊擁有一個(gè)FR_User類的實(shí)例,它可以簡單地判斷一個(gè)用戶是否已 經(jīng)登陸等等。

Smarty,作為模板引擎控制緩存是理所當(dāng)然的,但是控制器同樣可以控制一部分緩存。

從前面講的老方式到MVC方式對于很多人來講可能是一個(gè)全新、陌生的概念,但是一旦你轉(zhuǎn)換到了這樣一個(gè)概念,那么要轉(zhuǎn)回去將是件相當(dāng)困難的事情。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446665.htmlTechArticle什么是MVC MVC是一個(gè)可以讓你把“三個(gè)部分(即MVC的全稱,Model、 View、Controller)”諧調(diào)地組成一個(gè)復(fù)雜應(yīng)用程序的概念。一輛汽車就是一個(gè)...
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
VSCODE設(shè)置。JSON位置 VSCODE設(shè)置。JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位于用戶級或工作區(qū)級路徑,用于自定義VSCode設(shè)置。1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項(xiàng)目根目錄下的.vscode/settings

在PHP中構(gòu)建不變的物體,并具有可讀的屬性 在PHP中構(gòu)建不變的物體,并具有可讀的屬性 Jul 30, 2025 am 05:40 AM

ReadonlypropertiesinPHP8.2canonlybeassignedonceintheconstructororatdeclarationandcannotbemodifiedafterward,enforcingimmutabilityatthelanguagelevel.2.Toachievedeepimmutability,wrapmutabletypeslikearraysinArrayObjectorusecustomimmutablecollectionssucha

Python Parse Date String示例 Python Parse Date String示例 Jul 30, 2025 am 03:32 AM

使用datetime.strptime()可將日期字符串轉(zhuǎn)換為datetime對象,1.基本用法:通過"%Y-%m-%d"解析"2023-10-05"為datetime對象;2.支持多種格式如"%m/%d/%Y"解析美式日期、"%d/%m/%Y"解析英式日期、"%b%d,%Y%I:%M%p"解析帶AM/PM的時(shí)間;3.可用dateutil.parser.parse()自動(dòng)推斷未知格式;4.使用.d

CSS暗模式切換示例 CSS暗模式切換示例 Jul 30, 2025 am 05:28 AM

首先通過JavaScript獲取用戶系統(tǒng)偏好和本地存儲的主題設(shè)置,初始化頁面主題;1.HTML結(jié)構(gòu)包含一個(gè)按鈕用于觸發(fā)主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,并通過var()應(yīng)用這些變量;3.JavaScript檢測prefers-color-scheme并讀取localStorage決定初始主題;4.點(diǎn)擊按鈕時(shí)切換html元素上的dark-mode類,并將當(dāng)前狀態(tài)保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動(dòng)畫,提升用戶

CSS下拉菜單示例 CSS下拉菜單示例 Jul 30, 2025 am 05:36 AM

是的,一個(gè)常見的CSS下拉菜單可以通過純HTML和CSS實(shí)現(xiàn),無需JavaScript。1.使用嵌套的ul和li構(gòu)建菜單結(jié)構(gòu);2.通過:hover偽類控制下拉內(nèi)容的顯示與隱藏;3.父級li設(shè)置position:relative,子菜單使用position:absolute進(jìn)行定位;4.子菜單默認(rèn)display:none,懸停時(shí)變?yōu)閐isplay:block;5.可通過嵌套實(shí)現(xiàn)多級下拉,結(jié)合transition添加淡入動(dòng)畫,配合媒體查詢適配移動(dòng)端,整個(gè)方案簡潔且無需JavaScript支持,適合大

Java性能優(yōu)化和分析技術(shù) Java性能優(yōu)化和分析技術(shù) Jul 31, 2025 am 03:58 AM

使用性能分析工具定位瓶頸,開發(fā)測試階段用VisualVM或JProfiler,生產(chǎn)環(huán)境優(yōu)先Async-Profiler;2.減少對象創(chuàng)建,復(fù)用對象、用StringBuilder替代字符串拼接、選擇合適GC策略;3.優(yōu)化集合使用,根據(jù)場景選型并預(yù)設(shè)初始容量;4.優(yōu)化并發(fā),使用并發(fā)集合、減少鎖粒度、合理設(shè)置線程池;5.調(diào)優(yōu)JVM參數(shù),設(shè)置合理堆大小和低延遲垃圾回收器并啟用GC日志;6.代碼層面避免反射、用基本類型替代包裝類、延遲初始化、使用final和static;7.持續(xù)性能測試與監(jiān)控,結(jié)合JMH

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用于生成從可迭代對象中選取指定數(shù)量元素的所有不重復(fù)組合(順序無關(guān)),其用法包括:1.從列表中選2個(gè)元素組合,如('A','B')、('A','C')等,避免重復(fù)順序;2.對字符串取3個(gè)字符組合,如"abc"、"abd",適用于子序列生成;3.求兩數(shù)之和等于目標(biāo)值的組合,如1 5=6,簡化雙重循環(huán)邏輯;組合與排列的區(qū)別在于順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

數(shù)據(jù)工程ETL的Python 數(shù)據(jù)工程ETL的Python Aug 02, 2025 am 08:48 AM

Python是實(shí)現(xiàn)ETL流程的高效工具,1.數(shù)據(jù)抽?。和ㄟ^pandas、sqlalchemy、requests等庫可從數(shù)據(jù)庫、API、文件等來源提取數(shù)據(jù);2.數(shù)據(jù)轉(zhuǎn)換:使用pandas進(jìn)行清洗、類型轉(zhuǎn)換、關(guān)聯(lián)、聚合等操作,確保數(shù)據(jù)質(zhì)量并優(yōu)化性能;3.數(shù)據(jù)加載:利用pandas的to_sql方法或云平臺SDK將數(shù)據(jù)寫入目標(biāo)系統(tǒng),注意寫入方式與批次處理;4.工具推薦:Airflow、Dagster、Prefect用于流程調(diào)度與管理,結(jié)合日志報(bào)警與虛擬環(huán)境提升穩(wěn)定性與可維護(hù)性。

See all articles