PHP項目開發(fā)實例(一)(未使用框架)

學(xué)習(xí)意義

????根據(jù) 視頻教程 學(xué)習(xí)PHP基礎(chǔ) 和 MVC 框架的學(xué)習(xí)照棋。? ? ?

????了解PHP原生開發(fā)一個項目的流程,為以后使用 TP5 和 Laravel 作對比凿宾。

? ? 了解一個項目中大概的流程 和 運用到的技術(shù)點瓶埋,以及一些細節(jié)的邏輯思想,培養(yǎng)編程邏輯思維腐芍。

? ? GitHub地址? ? https://github.com/L1633/PHP-shop? 有空會慢慢更新。

? ? 用的環(huán)境是 phpStudy? 5.3.29-nts + Apache

oop思想

? ??OOPObject Oriented Programming试躏,面向?qū)ο缶幊讨碛拢嫦驅(qū)ο蟪绦蛟O(shè)計。

? ??核心思想:使用人類思考問題颠蕴、解決問題的方式來編寫程序泣刹。

? ??OOP的優(yōu)點(面向過程對比)

????可維護;可擴展犀被;可重用椅您;靈活度高。

MVC思想

? ??解釋:MVC是一種編程思想弱判,M襟沮,model,表示模型昌腰,完成具體的業(yè)務(wù)邏輯开伏,V,view遭商,表示視圖固灵,用來展示頁面,C劫流,controller巫玻,控制器,專門用來負責(zé)調(diào)度的祠汇。

? ??核心思想:將業(yè)務(wù)邏輯和顯示相分離仍秤。

? ??優(yōu)缺點:優(yōu)點,分層明確可很,便于維護和分工協(xié)作诗力,便于交流。缺點我抠,理解比較費勁苇本,學(xué)習(xí)成本高,對于小項目菜拓,反而感覺有些麻煩瓣窄。

項目搭建? ??

? ? 項目定位:基于B2C的電子商城

? ? 項目流程

? ? 入口文件 index.php

? ? 在項目中纳鼎,有許多控制器 和 模型 俺夕,所有就會有共同的代碼裳凸,需要定義基礎(chǔ)控制器和基礎(chǔ)模型。

項目流程

? ? 注意:1 良好的項目結(jié)構(gòu) 啥么;2 統(tǒng)一的命名規(guī)范 登舞;3 單一入口。

? ? 一? 項目結(jié)構(gòu)

項目結(jié)構(gòu)
application結(jié)構(gòu)目錄
controller結(jié)構(gòu)目錄
view結(jié)構(gòu)目錄

? ? ?? ? ? ? ? ? model悬荣,模型前后臺共用菠秒,不用創(chuàng)建admin 和 home;

frame結(jié)構(gòu)目錄
public結(jié)構(gòu)目錄

? ??????二 項目規(guī)范

? ? ? ? ? 命名規(guī)范

? ? ? ? ? ?① 一定要有注釋 ,注釋占整個項目的50%氯迂;

? ? ? ? ? ?② 一定要有統(tǒng)一的命名規(guī)范践叠,所有的命名都應(yīng)該盡量簡潔,見名知意嚼蚀。

? ? ? ? ? ??文件名

? ? ? ? ? ? 類文件禁灼,類名.class.php? 如 AdminController.class.php;

? ? ? ? ? ? 普通文件,文件名.php

? ? ? ? ? ? 類名轿曙,大駝峰命名法弄捕,首字母大寫,每個單詞首字母大寫导帝,AdminController

? ? ? ? ? ? 方法名守谓,小駝峰命名法,首字母小寫您单,每個單詞首字母大寫斋荞,checkLogin

? ? ? ? ? ? 屬性名,小駝峰命名法 或 下劃線方式虐秦,保持一致即可平酿。

? ? ? ? ? ? 函數(shù)名,下劃線 (var_dump)或者 直接連寫(imagecreatetruecolor)

? ??????????在我們的項目中悦陋,所有的控制器都是以xxxController命名的蜈彼。所有的數(shù)據(jù)庫模型都是以xxxModel命名的。

? ? ? ? ? ? ③ 嚴格區(qū)分大小寫

????????????Windows下有時候不區(qū)分大小寫俺驶,但是php做的項目通常是放在linux操作系統(tǒng)下幸逆,它是嚴格區(qū)分大小寫,所以需要養(yǎng)成好的習(xí)慣痒钝。

? ? ? ? ? ? ④ 注意縮進秉颗,代碼對齊


? ? 三 項目搭建

? ? ? ? ? ① 定義核心啟動類

? ? ? ? ? ? framework中的需要寫的功能:

? ??????????實例化對象調(diào)用方法痢毒,獲取pca參數(shù)送矩。

? ? ? ? ? ? 所以包含類定義文件---------->自動加載

????????????有這么多的文件,分別存放在不同的目錄中哪替,如何處理比較好栋荸??

????????????初始化:定義路徑常量

????????????路由分發(fā):實例化對象并調(diào)用方法

????????????自動加載:實現(xiàn)類的自動加載

入口文件
初始化

? ? ? ? ? ? ? ? 函數(shù):getcwd()獲取當(dāng)前工作目錄,在項目中獲取的是根目錄。

? ??????????????DIRECTORY_SEPARATOR常量晌块,路徑分隔符爱沟,在不同的操作系統(tǒng)下解析為不同的符號,Linux---->/? ?,? Windows------>\? 匆背。

路由分發(fā)和自定義自動加載函數(shù)

? ??????????????__CLASS__呼伸,是魔術(shù)常量,表示當(dāng)前類名

? ? ? ? ? ? ? ? 注冊函數(shù)的另一種寫法

? ? ? ? ? ? ? ? spl_autoload_register(‘self::load’);

? ? ? ? ? ? ② 加載視圖

加載視圖

? ? ? ? ? ? 將后臺首頁的html文件放到 views/admin 中钝尸,然后編寫方法括享。

? ? ? ? ? ? 靜態(tài)資源中的引用路徑

top.html中的引用路徑

? ??????????出于安全的考慮,瀏覽器是不能訪問本地資源的珍促。我們不能使用PHP常量路徑輸出铃辖,只能是使用網(wǎng)站的路徑(相對路徑或者寫/)。

????????????注意:出于安全和效率的考慮猪叙,后臺的靜態(tài)資源直接存放到admin之下娇斩。

? ? ? ? ? ? ③?定義核心控制器

? ? ? ? ? ? 在項目中,有很多控制器穴翩,其中有很多相同的功能犬第,為了實現(xiàn)代碼的重用,定義一個基礎(chǔ)控制器藏否,其他繼承該控制器即可瓶殃。

????????????該基礎(chǔ)控制器的 功能 和 定義的位置。

? ? ? ? ? ? 該控制器是前臺和后臺都會繼承的副签,在其他項目中也可以使用遥椿,所以這個控制器和具體的業(yè)務(wù)邏輯沒有關(guān)系,應(yīng)該放到framework------>core中,稱之為核心控制器。

? ? ? ? ? ? 功能劃分:

? ? ? ? ? ? 1 實現(xiàn)操作后的跳轉(zhuǎn)释液,并提示信息

跳轉(zhuǎn)功能

? ? ? ? ? ? message.html 中

meta 標(biāo)簽
代碼內(nèi)容

? ? ? ? ? ? ④ 載入數(shù)據(jù)庫模型

? ? ? ? ? ? ? ? 在framework中寫入Mysql.class.php數(shù)據(jù)庫操作工具類文件 升薯。

數(shù)據(jù)庫模型

? ? ? ? ? ? ? ? Mysql中,主要定義的方法(主要是查詢返回結(jié)果集的操作)

? ? ? ? ? ? ? ? getOne:獲取第一條記錄的第一個字段的值屉来,返回單個值。

????????????????getRow:獲取單條記錄,返回一位數(shù)組舔株。

????????????????getAll:獲取所有的記錄,返回二維數(shù)組还棱。

? ? ? ? ? ? ????在我們的項目中载慈,有多個模型,都需要完成增刪改查操作珍手。其中增刪改比較特殊办铡,他們的sql語句幾乎是一樣的辞做,可以將其定義成自動完成,將其定義到基礎(chǔ)模型中寡具。

基礎(chǔ)模型類

? ? ? ? ? ? ? ? 配置數(shù)據(jù)庫參數(shù)

配置文件位置
配置內(nèi)容

? ? ? ? ? ? ? ?將配置信息要賦值到 超級全局變量config秤茅,然后需要載入基礎(chǔ)控制器和基礎(chǔ)模型,手動強制載入童叠。

代碼

? ? ? ? ? ? ⑤ 載入工具類和輔助函數(shù)

? ? ? ? ? ? ? ? 比如載入 驗證碼 類框喳,在基礎(chǔ)控制器中實現(xiàn)

引入工具類

? ? ? ? ? ? ? ? 其他控制器繼承 基礎(chǔ)控制器 后就可以引用 library 方法 來引入 驗證碼類

驗證碼類
使用方式

? ? ? ? 三種加載方式

? ? ? ? APPlication主要就是數(shù)據(jù)模型庫,控制器和視圖厦坛√控制器和數(shù)據(jù)庫模型有一個顯著的特征,就是它們的名字特點粪般,控制器以Controller 結(jié)尾拼余,模型以 Model 結(jié)尾,使用自動加載來實現(xiàn)亩歹。

? ? ? ? Framework 中的一些類匙监,類名和文件本身變化,不能使用自動加載小作,根據(jù)文件的重要程度亭姥,分為:強制手動加載 按需手動加載。

強制手動加載

? ? ? ? ? ? 框架總結(jié)

MVC框架

? ? ? ? ? ? ? ? MVC搭建好后顾稀,只需要寫 application中的內(nèi)容达罗,也就是mvc(ThinkPHP5中也是在application中寫項目內(nèi)容)

? ? ? ? ? ? ? ? ?Controller:載入視圖

? ? ? ? ? ? ? ? ?View:html文件,嵌入php 輸出從數(shù)據(jù)庫讀取的內(nèi)容

? ? ? ? ? ? ? ? ?Model:編寫sql静秆,調(diào)用db對象粮揉,如果是增刪改,就直接使用自動完成

? ? ? ? ? ? ? ? ? 練習(xí)熟練了也很簡單8П省7鋈稀!J獬取7觥!


? ? 四 數(shù)據(jù)庫設(shè)計(難點:以后加強對數(shù)據(jù)庫設(shè)計的學(xué)習(xí))

? ??????????PHPCMS系統(tǒng)? ? 有數(shù)據(jù)庫 表和字段的設(shè)計膨蛮,值得參考和學(xué)習(xí)叠纹。

? ? ? ? ① 數(shù)據(jù)庫設(shè)計要點分析

? ? ? ? ? ? 字段類型,數(shù)據(jù)類型

? ? ? ? ? ? 表間關(guān)系

? ? ? ? ? ? 1 字段類型

? ? ? ? ? ? 數(shù)值型:整型敞葛,tinyint誉察、smallint、mediumint制肮、int冒窍、bigint。小數(shù)豺鼻,float综液、decimal;

? ? ? ? ? ? 字符串:varchar、char儒飒、text谬莹、(enum和set,很特殊);

? ? ? ? ? ? 日期時間型:date桩了,time附帽,datetime,timestamp井誉。開發(fā)中蕉扮,使用int表示比較常見的;

? ??????????沒有布爾類型,布爾類型如何表示颗圣?用enum或者tinyint喳钟,用tinyint會方便些;

????????????如果能用小的,就盡量用小的在岂,可以提升效率奔则,節(jié)省資源。

? ? ? ? ? ? 2 表間關(guān)系

? ? ? ? ? ? 表間關(guān)系指的是表與表之間的聯(lián)系蔽午。

? ? ? ? ? ? 表A的一條記錄對應(yīng)表B中有多少條易茬,表B的一條記錄對應(yīng)表A中有多少條。

? ? ? ? ? ? 主要分為:一對一及老;一對多抽莱;多對多。

? ? ? ? ? ? 一對一比較少見骄恶,多對多最難岸蜗。

? ? ? ? ? ? 一對多的表現(xiàn)形式:在多的一方,增加一個外鍵叠蝇,關(guān)聯(lián)到一的一方的主鍵璃岳。

? ? ? ? ? ? 多對多的變現(xiàn)形式:將一個多對多的關(guān)系轉(zhuǎn)換成兩個一對多的關(guān)系,需要增加一張中間的關(guān)聯(lián)表悔捶。

? ? ? ? ? ? 示例:商品模塊數(shù)據(jù)庫設(shè)計

? ? ? ? ? ? 數(shù)據(jù)庫的開始铃慷,從核心開始。本項目的核心是商品蜕该,從goods表開始犁柜。

? ? ? ? ? ? 圖片的保存分為兩個部分,圖片本身上傳到服務(wù)器的某個目錄下堂淡,在將 它的路徑 保存在表中字段馋缅。

? ? ? ? ? ? 要點:如何將一張表變成兩張表扒腕。

? ? ? ? ? ? 判斷所要表示的是否是同一種信息:商品信息,分類信息萤悴,品牌信息瘾腰。

? ? ? ? ? ? 關(guān)鍵它們的生命周期是否相同。

? ? ? ? ? ? 在考慮商品的屬性:① 通用屬性覆履,所有商品都具有的蹋盆,比如名稱,價格硝全,圖片等栖雾;②擴展屬性,也叫規(guī)格參數(shù)伟众,不同類型的商品其規(guī)格參數(shù)不同析藕,手機有內(nèi)存,攝像頭像素凳厢,分辨率等噪径,衣服有尺碼,顏色数初,材質(zhì)等找爱。


? ? 五 后臺功能? ? ? ?

? ??????1.后臺實現(xiàn)流程及實施步驟說明

? ? ? ? ? ?首先完成:商品管理分類------->商品品牌管理-------->商品類型管理--------->后臺登錄管理

? ? ? ? ? ? 其實:商品屬性管理-------->商品管理

? ? ? ? ? ? 實施步驟:1明確目標(biāo) ;2 業(yè)務(wù)邏輯分析(表結(jié)構(gòu)和表間關(guān)系)泡孩;3 編寫代碼實現(xiàn)(MVC)车摄;4 測試

腦圖

? ????????一控制器、一模型仑鸥、一表吮播,六個方法,三個視圖Q劭 R夂荨!4帧;犯辍!

控制器
模型

? ??????2.商品分類管理

? ? ? ? ? ? ① 明確目標(biāo):完成商品分類的增刪該查(CRUD)

? ? ? ? ? ? ② 業(yè)務(wù)邏輯分析

數(shù)據(jù)結(jié)構(gòu)

????????????parent_id:父分類id? 澎灸,涉及一個概念:? ? 無限分類

? ? ? ? ? ? 子類的parent_id 是 父類的 cat_id

? ? ? ? ? ? 無限分類:給定一個分類院塞,可以無限制的添加后代分類。

? ??????????如何實現(xiàn)無限分類呢性昭?

? ? ? ? ? ? 通常要從兩個層面來考慮:

? ? ? ? ? ? 數(shù)據(jù)庫的層面拦止,表設(shè)計,增加了一個parent_id的字段

? ? ? ? ? ? 程序的層面,具體的實現(xiàn)汹族,需要使用 遞歸的思想 萧求。

? ? ? ? ? ? 第⑤項 處理? 無限分類? ↓↓↓↓↓↓↓

? ? ? ? ? ? ③?顯示添加分類表單

? ? ? ? ? ? ? ? 引入cat_add.html文件到views文件夾下

控制器方法

? ? ? ? ? ? ④ 商品分類入庫

? ? ? ? ? ? ? ? 在cat_add.html 頁面中

頁面

? ??????????????注意兩點:

?????????????????????表單的action屬性是否正確;

?????????????????????每一個表單域的屬性顶瞒,盡量保證和表中的字段名一致夸政。

注意html文件
添加操作

? ? ? ? ? ? ⑤ 顯示商品分類

控制器
cat_list.html
顯示效果

? ? ? ? ? ? ? ? 無限分類的處理(重點)

? ? ? ? ? ? ? ? 重新排序,要按照分層的效果顯示

遞歸
重新排序

? ? ? ? ? ? 排序之后就是 縮進顯示

給每個子集增加一個層級屬性
html
顯示效果

????????⑥ 修改商品分類

顯示效果
傳遞當(dāng)前選擇項的id

? ? ? ? ? ? 注意:編輯時搁拙,需要傳遞修改的當(dāng)前分類的 cat_id!7唷;佟!E笃Q尉ァ!徙赢!

控制器
selectByPk
html頁面
傳遞id
控制器中的修改操作操作

? ? ? ? ? ? 注意:不能將當(dāng)前分類的后代或者自己作為其上級分類

注意點

? ? ? ? ? ? ? ? 解決方法

? ? ? ? ? ? ? ? ?①在顯示的時候字柠,不顯示當(dāng)前分類及其后代分類

? ? ? ? ? ? ? ? ?②在更新之前,判斷狡赐,如果將當(dāng)前分類的后代或者自己作為其上級分類窑业,提示不允許。

????????????????第二種處理的方式

獲取該類的所有后代id
進行判斷

????????????⑦ 刪除商品分類

? ? ? ? ? ? ? ? 一定要傳 刪除商品的cat_id U硖搿31!2罄蕖西潘!

刪除

? ? ? ? ? ? ? ? 刪除商品就像 刪除文件夾,2種方法:1.類似遞歸刪除哨颂,把父類下的所有子類都刪了喷市;2. 提示該類下有子類,不能刪除威恼,要先刪除 子類品姓,才能刪除父類。

第二種方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箫措,一起剝皮案震驚了整個濱河市缭黔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒂破,老刑警劉巖馏谨,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異附迷,居然都是意外死亡惧互,警方通過查閱死者的電腦和手機哎媚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喊儡,“玉大人拨与,你說我怎么就攤上這事“拢” “怎么了买喧?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匆赃。 經(jīng)常有香客問我淤毛,道長,這世上最難降的妖魔是什么算柳? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任低淡,我火速辦了婚禮,結(jié)果婚禮上瞬项,老公的妹妹穿的比我還像新娘蔗蹋。我一直安慰自己,他們只是感情好囱淋,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布猪杭。 她就那樣靜靜地躺著,像睡著了一般妥衣。 火紅的嫁衣襯著肌膚如雪胁孙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天称鳞,我揣著相機與錄音涮较,去河邊找鬼。 笑死冈止,一個胖子當(dāng)著我的面吹牛狂票,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熙暴,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼闺属,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了周霉?” 一聲冷哼從身側(cè)響起掂器,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俱箱,沒想到半個月后国瓮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年乃摹,在試婚紗的時候發(fā)現(xiàn)自己被綠了禁漓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡孵睬,死狀恐怖播歼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掰读,我是刑警寧澤秘狞,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站蹈集,受9級特大地震影響烁试,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雾狈,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一廓潜、第九天 我趴在偏房一處隱蔽的房頂上張望抵皱。 院中可真熱鬧善榛,春花似錦、人聲如沸呻畸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伤为。三九已至咒循,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绞愚,已是汗流浹背叙甸。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留位衩,地道東北人裆蒸。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像糖驴,于是被迫代替她去往敵國和親僚祷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,848評論 25 707
  • 第二周 20170819-20170825沒有及時把記錄發(fā)出來贮缕,但是絕對也沒有偷懶哈辙谜。 20170819 周六 H...
    faithfu閱讀 263評論 0 0
  • 人從出生到成長的每一天,都在不停的做出選擇感昼。 本人装哆,善良,但從小到大就喜歡猶豫不決,拖泥帶水烂琴,只好美名其曰的對每個...
    淺秋晗閱讀 479評論 0 1
  • 這次聚會見到我的女神-朵媽爹殊,心情激動不已,初次見面的花粉們一點都不陌生奸绷,皆因同頻相吸梗夸。 誰也想不到當(dāng)初被她的網(wǎng)易博...
    Apple_2a9e閱讀 167評論 0 0