學(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思想
? ??OOP:Object 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)
? ? ?? ? ? ? ? ? model悬荣,模型前后臺共用菠秒,不用創(chuàng)建admin 和 home;
? ??????二 項目規(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------>\? 匆背。
? ??????????????__CLASS__呼伸,是魔術(shù)常量,表示當(dāng)前類名
? ? ? ? ? ? ? ? 注冊函數(shù)的另一種寫法
? ? ? ? ? ? ? ? spl_autoload_register(‘self::load’);
? ? ? ? ? ? ② 加載視圖
? ? ? ? ? ? 將后臺首頁的html文件放到 views/admin 中钝尸,然后編寫方法括享。
? ? ? ? ? ? 靜態(tài)資源中的引用路徑
? ??????????出于安全的考慮,瀏覽器是不能訪問本地資源的珍促。我們不能使用PHP常量路徑輸出铃辖,只能是使用網(wǎng)站的路徑(相對路徑或者寫/)。
????????????注意:出于安全和效率的考慮猪叙,后臺的靜態(tài)資源直接存放到admin之下娇斩。
? ? ? ? ? ? ③?定義核心控制器
? ? ? ? ? ? 在項目中,有很多控制器穴翩,其中有很多相同的功能犬第,為了實現(xiàn)代碼的重用,定義一個基礎(chǔ)控制器藏否,其他繼承該控制器即可瓶殃。
????????????該基礎(chǔ)控制器的 功能 和 定義的位置。
? ? ? ? ? ? 該控制器是前臺和后臺都會繼承的副签,在其他項目中也可以使用遥椿,所以這個控制器和具體的業(yè)務(wù)邏輯沒有關(guān)系,應(yīng)該放到framework------>core中,稱之為核心控制器。
? ? ? ? ? ? 功能劃分:
? ? ? ? ? ? 1 實現(xiàn)操作后的跳轉(zhuǎn)释液,并提示信息
? ? ? ? ? ? message.html 中
? ? ? ? ? ? ④ 載入數(shù)據(jù)庫模型
? ? ? ? ? ? ? ? 在framework中寫入Mysql.class.php數(shù)據(jù)庫操作工具類文件 升薯。
? ? ? ? ? ? ? ? Mysql中,主要定義的方法(主要是查詢返回結(jié)果集的操作)
? ? ? ? ? ? ? ? getOne:獲取第一條記錄的第一個字段的值屉来,返回單個值。
????????????????getRow:獲取單條記錄,返回一位數(shù)組舔株。
????????????????getAll:獲取所有的記錄,返回二維數(shù)組还棱。
? ? ? ? ? ? ????在我們的項目中载慈,有多個模型,都需要完成增刪改查操作珍手。其中增刪改比較特殊办铡,他們的sql語句幾乎是一樣的辞做,可以將其定義成自動完成,將其定義到基礎(chǔ)模型中寡具。
? ? ? ? ? ? ? ? 配置數(shù)據(jù)庫參數(shù)
? ? ? ? ? ? ? ?將配置信息要賦值到 超級全局變量config秤茅,然后需要載入基礎(chǔ)控制器和基礎(chǔ)模型,手動強制載入童叠。
? ? ? ? ? ? ⑤ 載入工具類和輔助函數(shù)
? ? ? ? ? ? ? ? 比如載入 驗證碼 類框喳,在基礎(chǔ)控制器中實現(xiàn)
? ? ? ? ? ? ? ? 其他控制器繼承 基礎(chǔ)控制器 后就可以引用 library 方法 來引入 驗證碼類
? ? ? ? 三種加載方式
? ? ? ? APPlication主要就是數(shù)據(jù)模型庫,控制器和視圖厦坛√控制器和數(shù)據(jù)庫模型有一個顯著的特征,就是它們的名字特點粪般,控制器以Controller 結(jié)尾拼余,模型以 Model 結(jié)尾,使用自動加載來實現(xiàn)亩歹。
? ? ? ? Framework 中的一些類匙监,類名和文件本身變化,不能使用自動加載小作,根據(jù)文件的重要程度亭姥,分為:強制手動加載 和 按需手動加載。
? ? ? ? ? ? 框架總結(jié)
? ? ? ? ? ? ? ? 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ù)邏輯分析
????????????parent_id:父分類id? 澎灸,涉及一個概念:? ? 無限分類
? ? ? ? ? ? 子類的parent_id 是 父類的 cat_id
? ? ? ? ? ? 無限分類:給定一個分類院塞,可以無限制的添加后代分類。
? ??????????如何實現(xiàn)無限分類呢性昭?
? ? ? ? ? ? 通常要從兩個層面來考慮:
? ? ? ? ? ? 數(shù)據(jù)庫的層面拦止,表設(shè)計,增加了一個parent_id的字段
? ? ? ? ? ? 程序的層面,具體的實現(xiàn)汹族,需要使用 遞歸的思想 萧求。
? ? ? ? ? ? 第⑤項 處理? 無限分類? ↓↓↓↓↓↓↓
? ? ? ? ? ? ③?顯示添加分類表單
? ? ? ? ? ? ? ? 引入cat_add.html文件到views文件夾下
? ? ? ? ? ? ④ 商品分類入庫
? ? ? ? ? ? ? ? 在cat_add.html 頁面中
? ??????????????注意兩點:
?????????????????????表單的action屬性是否正確;
?????????????????????每一個表單域的屬性顶瞒,盡量保證和表中的字段名一致夸政。
? ? ? ? ? ? ⑤ 顯示商品分類
? ? ? ? ? ? ? ? 無限分類的處理(重點)
? ? ? ? ? ? ? ? 重新排序,要按照分層的效果顯示
? ? ? ? ? ? 排序之后就是 縮進顯示
????????⑥ 修改商品分類
? ? ? ? ? ? 注意:編輯時搁拙,需要傳遞修改的當(dāng)前分類的 cat_id!7唷;佟!E笃Q尉ァ!徙赢!
? ? ? ? ? ? 注意:不能將當(dāng)前分類的后代或者自己作為其上級分類
? ? ? ? ? ? ? ? 解決方法
? ? ? ? ? ? ? ? ?①在顯示的時候字柠,不顯示當(dāng)前分類及其后代分類
? ? ? ? ? ? ? ? ?②在更新之前,判斷狡赐,如果將當(dāng)前分類的后代或者自己作為其上級分類窑业,提示不允許。
????????????????第二種處理的方式
????????????⑦ 刪除商品分類
? ? ? ? ? ? ? ? 一定要傳 刪除商品的cat_id U硖搿31!2罄蕖西潘!
? ? ? ? ? ? ? ? 刪除商品就像 刪除文件夾,2種方法:1.類似遞歸刪除哨颂,把父類下的所有子類都刪了喷市;2. 提示該類下有子類,不能刪除威恼,要先刪除 子類品姓,才能刪除父類。