版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章PHP操作MySQL《PHP網(wǎng)站開發(fā)實例教程(第3版)》學(xué)習(xí)目標/Target
掌握MySQL環(huán)境搭建方法,能夠獨立獲取、安裝、配置和啟動、登錄MySQL。
了解PHP中的數(shù)據(jù)庫擴展,能夠說出常用的數(shù)據(jù)庫擴展。
掌握MySQLi擴展的使用方法,能夠使用MySQLi擴展連接數(shù)據(jù)庫和操作數(shù)據(jù)。章節(jié)概述/Summary任何一門編程語言都需要對數(shù)據(jù)進行操作,實現(xiàn)數(shù)據(jù)的存儲和獲取,PHP也不例外。PHP所支持的數(shù)據(jù)庫類型較多,在這些數(shù)據(jù)庫中,MySQL一直被認為是PHP的最佳搭檔之一。本章將對PHP操作MySQL的相關(guān)內(nèi)容進行詳細講解。目錄/Contents5.15.25.3MySQL環(huán)境搭建PHP中的數(shù)據(jù)庫擴展MySQLi擴展的使用MySQL環(huán)境搭建5.1
先定一個小目標!掌握MySQL的獲取,能夠獲取MySQL的安裝包。5.1.1獲取MySQLMySQL目前使用雙授權(quán)政策,它分為社區(qū)版和商業(yè)版。社區(qū)版包含最新功能,商業(yè)版只包含已穩(wěn)定的功能。以社區(qū)版為例,講解如何獲取MySQL安裝包。5.1.1獲取MySQL5.1.1獲取MySQLMySQL官方網(wǎng)站首頁。通過瀏覽器訪問MySQL官方網(wǎng)站的首頁:STEP01進入MySQL下載頁面5.1.1獲取MySQLMySQL的下載頁面。展示了MySQL的相關(guān)產(chǎn)品,下載MySQLCommunity(GPL):STEP02進入MySQL社區(qū)版的下載頁面5.1.1獲取MySQLMySQL社區(qū)版下載頁面。提供MySQL社區(qū)版相關(guān)產(chǎn)品的下載:STEP03進入MySQL社區(qū)版服務(wù)器的下載頁面5.1.1獲取MySQLMySQL社區(qū)版服務(wù)器的下載頁面。MySQL社區(qū)版相關(guān)產(chǎn)品的下載:STEP04進入文件下載頁面5.1.1獲取MySQLMySQL社區(qū)版文件下載頁面。下載MySQL社區(qū)版。STEP05下載MySQL安裝包
先定一個小目標!掌握安裝MySQL的方法,能夠完成MySQL的安裝。5.1.2安裝MySQL1解壓安裝包,MySQL安裝目錄:5.1.2安裝MySQLbin目錄:放置一些可執(zhí)行文件。docs目錄:放置文檔。include目錄:放置一些頭文件。lib目錄:放置一系列的庫文件。share目錄:存放字符集、語言等信息。LICENSE文件:介紹MySQL的授權(quán)信息。README文件:介紹MySQL的版權(quán)、相關(guān)文檔地址和下載地址等信息。找到命令提示符工具,選擇“以管理員身份運行”。在命令提示符窗口,切換到MySQL安裝目錄下的bin目錄。3安裝MySQL服務(wù),服務(wù)名稱為MySQL80。42mysqld-installMySQL805.1.2安裝MySQL5.1.2安裝MySQLMySQL安裝成功后如需卸載,卸載命令如下:mysqld-removeMySQL服務(wù)名稱
先定一個小目標!5.1.3配置和啟動MySQL掌握配置和啟動MySQL的方法,能夠完成MySQL的配置和啟動。1.創(chuàng)建MySQL配置文件在C:\web\mysql8.0目錄下創(chuàng)建名稱為my.ini的配置文件,添加配置:[mysqld]basedir=C:/web/mysql8.0datadir=C:/web/mysql8.0/dataport=3306basedir:MySQL的安裝目錄datadir:MySQL數(shù)據(jù)庫文件的保存目錄port:MySQL客戶端連接服務(wù)器端時使用的端口號,默認33065.1.3配置和啟動MySQL2.初始化MySQL初始化數(shù)據(jù)庫,自動創(chuàng)建數(shù)據(jù)庫文件目錄。初始化MySQL時自動為默認用戶root生成隨機密碼,具體命令如下:mysqld--initialize--console--initialize表示初始化數(shù)據(jù)庫--console表示將初始化的過程在命令提示符窗口中顯示5.1.3配置和啟動MySQL3.啟動MySQL啟動名為MySQL80的服務(wù),具體命令如下:netstartMySQL80netstart是Windows系統(tǒng)中用于啟動服務(wù)的命令MySQL80是安裝MySQL服務(wù)時自定義的服務(wù)名稱5.1.3配置和啟動MySQL如果想要停止名為MySQL80的服務(wù),具體命令如下:netstopMySQL805.1.3配置和啟動MySQL
先定一個小目標!5.1.4登錄MySQL掌握登錄MySQL的命令,能夠正確登錄MySQL。在命令提示符窗口中登錄MySQL數(shù)據(jù)庫,具體命令如下:mysql-uroot-pmysql表示當(dāng)前目錄(C:\web\mysql8.0\bin)下的mysql.exe-uroot表示以root用戶的身份登錄5.1.4登錄MySQL在Enterpassword:后輸入密碼登錄如果想要退出MySQL服務(wù)器,使用exit或quit命令為了保護數(shù)據(jù)庫的安全,為用戶設(shè)置密碼,將root用戶的密碼設(shè)置為123456:mysql>ALTER
USER
'root'@'localhost'
IDENTIFIED
BY
'123456';5.1.4登錄MySQL登錄MySQL后,查看數(shù)據(jù)庫中現(xiàn)有的數(shù)據(jù)庫:SHOWDATABASES;information_schema:存儲數(shù)據(jù)庫和數(shù)據(jù)表的結(jié)構(gòu)信息。mysql:存儲MySQL自身需要使用的控制和管理信息,如用戶的權(quán)限。performance_schema:存儲系統(tǒng)性能相關(guān)的動態(tài)參數(shù),如全局變量。sys:系統(tǒng)數(shù)據(jù)庫,包括存儲過程、自定義函數(shù)等信息。5.1.4登錄MySQL注意:初學(xué)者不要隨意刪除或修改MySQL自動創(chuàng)建的數(shù)據(jù)庫,避免造成服務(wù)器故障。5.1.4登錄MySQLPHP中的數(shù)據(jù)庫擴展5.2
先定一個小目標!了解PHP中的數(shù)據(jù)庫擴展,能夠說出常用的數(shù)據(jù)庫擴展。5.2PHP中的數(shù)據(jù)庫擴展MySQLi擴展是專門用于與MySQL數(shù)據(jù)庫交互的擴展,它是MySQL擴展的增強版,不僅包含所有MySQL擴展的功能函數(shù),還可以使用MySQL新版本中的高級特性。例如,多語言執(zhí)行和事務(wù)的執(zhí)行,采用預(yù)處理方式解決SQL注入問題等。MySQLi擴展PDO擴展PDO提供了一個統(tǒng)一的API,只要修改其中的數(shù)據(jù)來源名稱,就可以實現(xiàn)PHP與不同類型數(shù)據(jù)庫服務(wù)器之間的交互。PDO擴展解決了不同數(shù)據(jù)庫擴展的API互不兼容的問題,提高了程序的可維護性和可移植性。5.2PHP中的數(shù)據(jù)庫擴展MySQLi擴展的使用5.3
先定一個小目標!了解MySQLi擴展的開啟,能夠在配置文件中開啟MySQLi擴展。5.3.1開啟MySQLi擴展在php.ini中找到“;extension=mysqli”配置項,去掉前面的分號開啟MySQLi擴展。修改后的配置代碼如下:extension=mysqli5.3.1開啟MySQLi擴展
先定一個小目標!了解MySQLi擴展中的函數(shù),能夠說出常用的MySQLi擴展函數(shù)。5.3.2MySQLi擴展的常用函數(shù)MySQLi擴展內(nèi)置了用于實現(xiàn)連接數(shù)據(jù)庫、設(shè)置字符集、獲取結(jié)果集中的信息等功能的函數(shù)。MySQLi擴展的常用函數(shù):函數(shù)描述mysqli_connect(string$hostname,string$username,string$password,string$database,int$port,string$socket)連接數(shù)據(jù)庫,成功返回連接對象,失敗返回falsemysqli_connect_error()獲取連接時的錯誤信息,返回錯誤描述字符串mysqli_select_db(mysqli$mysql,string$database)選擇數(shù)據(jù)庫,若成功返回true,失敗返回falsemysqli_set_charset(mysqli$mysql,string$charset)設(shè)置客戶端字符集,成功返回true,失敗返回falsemysqli_query(mysqli$mysql,string$query)執(zhí)行數(shù)據(jù)庫查詢,寫操作返回true,讀操作返回結(jié)果集對象,失敗返回falsemysqli_insert_id(mysqli$mysql)獲取上一次插入操作產(chǎn)生的idmysqli_affected_rows(mysqli$mysql)獲取上一次操作受影響的行數(shù)mysqli_num_rows(mysqli_result$result)獲取結(jié)果中的行數(shù)1/25.3.2MySQLi擴展的常用函數(shù)MySQLi擴展的常用函數(shù):函數(shù)描述mysqli_fetch_assoc(mysqli_result$result)獲取一行結(jié)果并以關(guān)聯(lián)數(shù)組返回mysqli_fetch_row(mysqli_result$result)獲取一行結(jié)果并以索引數(shù)組返回mysqli_fetch_all(mysqli_result$result,int$mode)獲取所有的結(jié)果,并以數(shù)組方式返回mysqli_fetch_array(mysqli_result$result,int$mode)從結(jié)果集中獲取一行作為索引數(shù)組或關(guān)聯(lián)數(shù)組mysqli_free_result(mysqli_result$result)釋放結(jié)果集mysqli_errno(mysqli$mysql)返回最近函數(shù)的錯誤編號mysqli_error(mysqli$mysql)返回最近函數(shù)的錯誤信息mysqli_report(int$flags)開啟或禁用MySQL內(nèi)部錯誤報告mysqli_close(mysqli$mysql)關(guān)閉數(shù)據(jù)庫連接2/25.3.2MySQLi擴展的常用函數(shù)
先定一個小目標!掌握使用MySQLi擴展操作數(shù)據(jù)庫的步驟,能夠在程序中使用MySQLi擴展操作數(shù)據(jù)庫。5.3.3使用MySQLi擴展操作數(shù)據(jù)庫5.3.3使用MySQLi擴展操作數(shù)據(jù)庫使用MySQLi擴展連接數(shù)據(jù)庫的4個步驟連接數(shù)據(jù)庫關(guān)閉數(shù)據(jù)庫連接錯誤處理設(shè)置字符集1.連接數(shù)據(jù)庫使用MySQLi擴展操作數(shù)據(jù)前,需要使用mysqli_connect()函數(shù)連接數(shù)據(jù)庫。5.3.3使用MySQLi擴展操作數(shù)據(jù)庫語法格式mysqli_connect(stringhostname, //主機名或IP地址stringusername, //用戶名stringpassword, //密碼stringdbname, //數(shù)據(jù)庫名intport, //端口號stringsocket //socket通信(適用于Linux環(huán)境))使用MySQLi擴展連接數(shù)據(jù)庫:5.3.3使用MySQLi擴展操作數(shù)據(jù)庫<?php//連接數(shù)據(jù)庫$link=mysqli_connect('localhost','root','123456','mydb','3306');//查看連接結(jié)果echo$link?'數(shù)據(jù)庫連接成功':'數(shù)據(jù)庫連接失敗';如果將函數(shù)的密碼參數(shù)修改為“123”,由于密碼是錯誤的,數(shù)據(jù)庫會連接失敗,提示信息:5.3.3使用MySQLi擴展操作數(shù)據(jù)庫2.錯誤處理使用mysqli_connect_error()函數(shù)獲取錯誤信息:5.3.3使用MySQLi擴展操作數(shù)據(jù)庫<?phpmysqli_report(MYSQLI_REPORT_OFF); //關(guān)閉錯誤報告//連接數(shù)據(jù)庫$link=@mysqli_connect('localhost','root','123','mydb');//輸出連接失敗時的錯誤信息if(!$link){exit('mysqliconnectionerror:'.mysqli_connect_error());}3.設(shè)置字符集數(shù)據(jù)庫連接成功后,還需要設(shè)置客戶端字符集,以確保PHP與MySQL使用相同的字符集。使用mysqli_set_charset()函數(shù)設(shè)置字符集:5.3.3使用MySQLi擴展操作數(shù)據(jù)庫語法格式mysqli_set_charset(mysqli$mysql,string$charset)$mysql表示數(shù)據(jù)庫連接對象$charset是要設(shè)置的字符集設(shè)置成功返回true,設(shè)置失敗返回false使用mysqli_set_charset()函數(shù)設(shè)置字符集:5.3.3使用MySQLi擴展操作數(shù)據(jù)庫if(!mysqli_set_charset($link,'utf8mb4')){exit(mysqli_error($link));}注意:為了避免中文亂碼問題,需要保證PHP腳本文件、Web服務(wù)器返回的編碼、網(wǎng)頁的<meta>標簽、PHP訪問MySQL使用的字符集是統(tǒng)一的。5.3.3使用MySQLi擴展操作數(shù)據(jù)庫4.關(guān)閉數(shù)據(jù)庫連接當(dāng)不需要使用數(shù)據(jù)庫連接時,需要關(guān)閉數(shù)據(jù)庫連接。使用mysqli_close()函數(shù)關(guān)閉數(shù)據(jù)庫連接:5.3.3使用MySQLi擴展操作數(shù)據(jù)庫語法格式mysqli_close(mysqli$mysql)使用mysqli_close()函數(shù)關(guān)閉數(shù)據(jù)庫連接:示例代碼mysqli_close($link);
先定一個小目標!掌握使用MySQLi擴展操作數(shù)據(jù)的步驟,能夠在程序中使用MySQLi擴展操作數(shù)據(jù)。5.3.4使用MySQLi擴展操作數(shù)據(jù)使用MySQLi擴展操作數(shù)據(jù)新增數(shù)據(jù)查詢數(shù)據(jù)更新數(shù)據(jù)刪除數(shù)據(jù)5.3.4使用MySQLi擴展操作數(shù)據(jù)1.新增數(shù)據(jù)使用MySQLi擴展新增數(shù)據(jù)的代碼://新增數(shù)據(jù)的SQL語句$query='INSERTINTO`student`VALUES(NULL,\'Bob\',20)';//執(zhí)行新增操作$result=mysqli_query($link,$query);if(!$result){exit(mysqli_error($link));}echo'新增數(shù)據(jù)的id值:'.mysqli_insert_id($link);//獲取自增id5.3.4使用MySQLi擴展操作數(shù)據(jù)2.更新數(shù)據(jù)使用MySQLi擴展更新數(shù)據(jù)的代碼://更新數(shù)據(jù)的SQL語句$query='UPDATE`student`SET`age`=21WHERE`id`=5';//執(zhí)行更新操作$result=mysqli_query($link,$query);if(!$result){exit(mysqli_error($link));}//返回結(jié)果echomysqli_affected_rows($link);5.3.4使用MySQLi擴展操作數(shù)據(jù)3.刪除數(shù)據(jù)使用MySQLi擴展刪除數(shù)據(jù)的代碼://刪除數(shù)據(jù)的SQL語句$query='DELETEFROM`student`WHERE`id`=5';//執(zhí)行刪除操作$result=mysqli_query($link,$query);if(!$result){exit(mysqli_error($link));}//返回結(jié)果echomysqli_affected_rows($link);//關(guān)閉連接mysqli_close($link);5.3.4使用MySQLi擴展操作數(shù)據(jù)4.查詢數(shù)據(jù)使用MySQLi擴展查詢數(shù)據(jù)的代碼://查詢數(shù)據(jù)的SQL語句$query='SELECT*FROM`student`';//執(zhí)行查詢操作$result=mysqli_query($link,$query);if(!$result){exit(mysqli_error($link));}//處理結(jié)果集$lists=[];while($row=mysqli_fetch_assoc($result)){$lists[]=$row;}//釋放結(jié)果集資源mysqli_free_result($result);5.3.4使用MySQLi擴展操作數(shù)據(jù)4.查詢數(shù)據(jù)將查詢結(jié)果在頁面中展示:echo'<table><tr><th>id</th><th>姓名</th><th>年齡</th></tr>';foreach($listsas$val){echo"<tr><td>{$val['id']}</td><td>{$val['name']}</td><td>{$val['age']}</td></tr>";}echo'</table>';5.3.4使用MySQLi擴展操作數(shù)據(jù)通過mysqli_fetch_all()函數(shù)一次查詢出所有記錄://一次查詢所有記錄$data=mysqli_fetch_all($result,MYSQLI_ASSOC);//輸出查詢結(jié)果var_dump($data);5.3.4使用MySQLi擴展操作數(shù)據(jù)本章小結(jié)本章首先講解了MySQL的獲取、安裝、配置和啟動、登錄,然后介紹了PHP中的數(shù)據(jù)庫擴展,最后講解了MySQLi擴展的使用方法。通過對本章內(nèi)容的學(xué)習(xí),讀者應(yīng)能夠熟練運用PHP操作MySQL數(shù)據(jù)庫。本章小結(jié)第6章PHP面向?qū)ο缶幊獭禤HP網(wǎng)站開發(fā)實例教程(第3版)》學(xué)習(xí)目標/Target
了解面向?qū)ο蟮母拍睿軌蛘f出面向過程和面向?qū)ο蟮膮^(qū)別、類與對象的概念以及
面向?qū)ο蟮娜筇卣鳌?/p>
掌握類的定義和實例化,能夠定義類和實例化類。
掌握類成員的定義,能夠在類中定義類成員。
掌握對象的克隆方法,能夠根據(jù)需求克隆對象。
掌握訪問控制修飾符的使用方法,能夠正確使用訪問控制修飾符。學(xué)習(xí)目標/Target
掌握類中$this的使用方法,能夠在類中使用$this訪問實例成員。
掌握構(gòu)造方法和析構(gòu)方法的語法,能夠使用這兩個方法完成對象的初始化和銷毀。
掌握類常量和靜態(tài)成員的使用方法,能夠在類中定義類常量和靜態(tài)成員。
掌握繼承的使用方法,能夠?qū)崿F(xiàn)類的繼承和有限繼承。
掌握重寫的使用方法,能夠?qū)崿F(xiàn)對類成員的重寫。學(xué)習(xí)目標/Target
掌握靜態(tài)延遲綁定,能夠根據(jù)需求訪問靜態(tài)類成員。
掌握final關(guān)鍵字的使用方法,能夠使用final關(guān)鍵字定義最終類和類成員。
掌握抽象類的使用方法,能夠根據(jù)實際需求使用抽象類。
掌握接口的實現(xiàn)方法,能夠定義和實現(xiàn)接口。
掌握接口的繼承方法,能夠根據(jù)實際需求使用接口繼承。章節(jié)概述/Summary隨著PHP的不斷發(fā)展,PHP對面向?qū)ο缶幊痰闹С忠苍絹碓酵晟疲沟肞HP能夠處理更多復(fù)雜的需求。對PHP開發(fā)人員來說,PHP面向?qū)ο缶幊淌潜貍涞闹匾寄苤?。本章將對PHP面向?qū)ο缶幊踢M行詳細講解。目錄/Contents6.16.26.3初識面向?qū)ο箢惻c對象的使用類常量和靜態(tài)成員目錄/Contents6.46.56.6繼承抽象類接口初識面向?qū)ο?.1
先定一個小目標!了解面向?qū)ο蟮母拍睿軌蛘f出面向過程和面向?qū)ο蟮膮^(qū)別。6.1.1面向過程與面向?qū)ο蟮膮^(qū)別6.1.1面向過程與面向?qū)ο蟮膮^(qū)別面向過程是指將要實現(xiàn)的功能分解成具體的步驟,通過函數(shù)依次實現(xiàn)這些步驟,使用時按規(guī)定好的順序調(diào)用函數(shù)即可。面向過程面向?qū)ο竺嫦驅(qū)ο髣t是一種更符合人類思維習(xí)慣的編程思想,它分析現(xiàn)實生活中不同事物的各種形態(tài),在程序中使用對象來映射現(xiàn)實中的事物,是對現(xiàn)實世界的抽象。6.1.1面向過程與面向?qū)ο蟮膮^(qū)別使用學(xué)生對象示例代碼面向?qū)ο笫纠a//獲取學(xué)生對象的name屬性echo$student->name;//調(diào)用學(xué)生對象的sayHello()方法$student->sayHello();//老師布置作業(yè)$work=$teacher->createWork();//學(xué)生做作業(yè)$result=$student->doWork($work);//老師批改作業(yè)$score=$teacher->check($result);//輸出學(xué)生的作業(yè)成績echo$student->name.'的考試成績?yōu)椋?.$score;主要側(cè)重于用什么對象解決什么問題每一個對象中都包含了若干屬性和方法,代碼的可讀性強,更容易維護
先定一個小目標!了解面向?qū)ο笾械念惻c對象,能夠說出什么是類和對象。6.1.2面向?qū)ο笾械念惻c對象面向?qū)ο笏枷肓D使程序?qū)κ挛锏拿枋雠c該事物在現(xiàn)實中的形態(tài)一致,為了做到這一點,面向?qū)ο笏枷胩岢隽祟惡蛯ο蟮母拍睿侯悾╟lass):是對某一類事物的抽象描述,類中包含該類事物的一些基本特征。對象(object):用于表示現(xiàn)實中該事物的個體。對象是根據(jù)類創(chuàng)建的,類是對象的模板,通過一個類可以創(chuàng)建多個對象。6.1.2面向?qū)ο笾械念惻c對象類與對象的關(guān)系:6.1.2面向?qū)ο笾械念惻c對象
先定一個小目標!了解面向?qū)ο蟮奶卣?,能夠說出面向?qū)ο蟮娜筇卣鳌?.1.3面向?qū)ο蟮娜筇卣鞣庋b面向?qū)ο笕筇卣髅嫦驅(qū)ο蟮暮诵乃枷?,將對象的一部分屬性和方法封裝,對外提供可以操作的接口。封裝的優(yōu)勢是使對象的使用者不必研究對象的內(nèi)部原理,即可使用對象提供的功能。繼承繼承是實現(xiàn)代碼復(fù)用的重要特性。繼承描述了類與類之間的關(guān)系,將類分為父類和子類,子類通過繼承可以直接使用父類的成員。繼承的優(yōu)勢是提高程序開發(fā)效率,為程序的修改補充提供了便利。多態(tài)多態(tài)是指同名操作可作用于多種類型的對象上并獲取不同結(jié)果。多態(tài)的優(yōu)勢是讓不同的對象擁有相同的操作接口,降低使用者的學(xué)習(xí)成本。6.1.3面向?qū)ο蟮娜筇卣黝惻c對象的使用6.2
先定一個小目標!掌握類的定義和實例化,能夠定義類和實例化類。6.2.1類的定義和實例化類由class關(guān)鍵字、類名和類成員組成。語法格式class類名{
類成員}6.2.1類的定義和實例化若想要使用類的功能,還需要根據(jù)類創(chuàng)建對象,這個操作稱為類的實例化。通過類的實例化創(chuàng)建的對象稱為類的實例,使用new關(guān)鍵字創(chuàng)建類的實例。語法格式$對象名=new類名([參數(shù)1,參數(shù)2,…]);6.2.1類的定義和實例化演示定義類和實例化類:classPerson
//定義Person類{}$person=newPerson(); //實例化Person類var_dump($person); //輸出結(jié)果:object(Person)#1(1){}6.2.1類的定義和實例化多學(xué)一招:instanceof運算符instanceof運算符instanceof運算符可以判斷對象是否是某個類的實例,具體語法格式如下:$對象名instanceof類名instanceof左側(cè)是某個類的實例,右側(cè)是類名。如果判斷成立,判斷結(jié)果為true,否則判斷結(jié)果為false。對于一個子類對象,如果instanceof右側(cè)是父類,判斷結(jié)果也為true。多學(xué)一招:instanceof運算符instanceof運算符演示instanceof運算符的使用:classOther //定義Other類{}classPerson //定義Person類{}$person=newPerson();var_dump($personinstanceofPerson); //輸出結(jié)果:bool(true)var_dump($personinstanceofOther); //輸出結(jié)果:bool(false)
先定一個小目標!掌握類成員的定義,能夠在類中定義類成員。6.2.2類成員類成員定義在類名后的“{}”中。類成員包括屬性和方法。屬性類似變量,描述對象的特征,如人的姓名、年齡。方法類似函數(shù),描述對象的行為,如說話、走路。6.2.2類成員在類中定義類成員的語法格式:語法格式class類名{
訪問控制修飾符$屬性名=值; //定義屬性訪問控制修飾符function方法名([參數(shù)1,參數(shù)2,…]) //定義方法
{
方法體
}}6.2.2類成員定義類成員后,在創(chuàng)建類的對象時,程序會依據(jù)類成員創(chuàng)建對象成員。對象成員又稱為實例成員,使用對象成員訪問符“->”可以訪問對象成員。語法格式$對象名->屬性名; //訪問屬性$對象名->方法名(); //訪問方法(調(diào)用方法)6.2.2類成員演示類成員的使用:classPerson{
public$name='未命名';
//定義屬性
publicfunctionspeak()
//定義方法
{
echo'Thepersonisspeaking.';
}}$person=newPerson(); //實例化Person類echo$person->name;
//獲取屬性值,輸出結(jié)果:未命名$person->name='張三'; //修改屬性的值echo$person->name; //獲取屬性值,輸出結(jié)果:張三$person->speak();
//輸出結(jié)果:Thepersonisspeaking.6.2.2類成員多學(xué)一招:可變類與類成員可變類與可變類成員使用可變類或可變類成員時,對象成員訪問符號->后面跟$變量名稱。定義可變類和可變類成員的示例代碼:<?phpclassCalculate{public$width=10;public$height=20;publicfunctiongetArea(){return$this->width*$this->height;}}$classname='Calculate';$obj=new$classname(); //實例化Calculate類$width='width';echo'寬='.$obj->$width; //訪問width屬性$height='height';echo'高='.$obj->$height; //訪問height屬性$area='getArea';echo'面積='.$obj->$area(); //調(diào)用getArea()方法
先定一個小目標!掌握對象的克隆,能夠根據(jù)需求實現(xiàn)克隆對象。6.2.3對象的克隆當(dāng)一個變量的值為對象時,如果將這個變量賦值給另一個變量,則此過程并不會創(chuàng)建對象的副本,而是使兩個變量引用同一個對象。如果想要獲取多個相同的對象,并且某一個對象的成員發(fā)生改變時不影響其他對象的成員,可以通過對象的克隆來實現(xiàn)。6.2.3對象的克隆對象的克隆使用clone關(guān)鍵字:語法格式$對象名2=clone$對象名1;6.2.3對象的克隆對比對象變量賦值和對象克隆的區(qū)別:示例代碼classPerson{public$age=1;}$object1=newPerson();$object2=$object1;$object1->age=10;var_dump($object1->age);//輸出結(jié)果:int(10)var_dump($object2->age);//輸出結(jié)果:int(10)6.2.3對象的克隆示例代碼classPerson{public$age=1;}$object1=newPerson();$object2=clone$object1;$object1->age=10;var_dump($object1->age);//輸出結(jié)果:int(10)var_dump($object2->age);//輸出結(jié)果:int(1)多學(xué)一招:魔術(shù)方法魔術(shù)方法魔術(shù)方法不需要手動調(diào)用,它會在某一刻自動執(zhí)行,使用魔術(shù)方法可以為程序的開發(fā)帶來極大便利。常見的魔術(shù)方法:魔術(shù)方法描述__get()當(dāng)調(diào)用一個未定義或無權(quán)訪問的屬性時自動調(diào)用此方法__set()給一個未定義或無權(quán)訪問的屬性賦值時自動調(diào)用此方法__isset()當(dāng)在一個未定義或無權(quán)訪問的屬性上執(zhí)行isset()操作時調(diào)用此方法__unset()當(dāng)在一個未定義或無權(quán)訪問的屬性上執(zhí)行unset()操作時調(diào)用此方法__construct()構(gòu)造方法,當(dāng)對象被創(chuàng)建時調(diào)用此方法__destruct()析構(gòu)方法,在對象被銷毀前(即從內(nèi)存中清除前)調(diào)用此方法1/2多學(xué)一招:魔術(shù)方法魔術(shù)方法魔術(shù)方法不需要手動調(diào)用,它會在某一刻自動執(zhí)行,使用魔術(shù)方法可以為程序的開發(fā)帶來極大便利。常見的魔術(shù)方法:魔術(shù)方法描述__toString()當(dāng)一個類被當(dāng)成字符串時調(diào)用此方法__invoke()以調(diào)用函數(shù)的方式調(diào)用對象時會調(diào)用此方法__sleep()可用于清理對象,在序列化前執(zhí)行__wakeup()用于預(yù)先準備對象需要的資源,在反序列化前執(zhí)行__call()在對象中調(diào)用一個不可訪問的方法時會被調(diào)用__callstatic()靜態(tài)上下文中調(diào)用一個不可訪問的方法時會被調(diào)用,該方法需要定義為靜態(tài)方法2/2多學(xué)一招:魔術(shù)方法魔術(shù)方法在Person類中使用__clone()魔術(shù)方法:classPerson{
publicfunction__clone(){echo'__clone()方法被執(zhí)行了';}}
先定一個小目標!掌握訪問控制修飾符的使用,能夠正確使用訪問控制修飾符。6.2.4訪問控制修飾符訪問控制修飾符用于控制類成員是否允許被外界訪問。訪問控制修飾符有3個:public(公有修飾符)protected(保護成員修飾符)private(私有修飾符)6.2.4訪問控制修飾符訪問控制修飾符的作用范圍:6.2.4訪問控制修飾符訪問控制修飾符同一個類內(nèi)子類類外public允許訪問允許訪問允許訪問protected允許訪問允許訪問不允許訪問private允許訪問不允許訪問不允許訪問演示訪問控制修飾符的使用方法:6.2.4訪問控制修飾符classUser{
public$name='張三'; //姓名
protected$phone='123456';
//電話
private$money='5000'; //存款}$user=newUser();echo$user->name; //輸出結(jié)果:張三echo$user->phone; //報錯echo$user->money; //報錯注意:在定義類時,屬性必須有訪問控制修飾符,否則會報錯;方法如果沒有指定訪問控制修飾符,默認為public。6.2.4訪問控制修飾符
先定一個小目標!掌握類中的$this的使用,能夠在類中使用$this訪問實例成員。6.2.5類中的$this訪問實例成員時,應(yīng)使用類實例化后的對象訪問。如果想在類的方法中訪問實例成員,則可以使用特殊變量$this實現(xiàn),$this代表當(dāng)前對象。6.2.5類中的$this通過代碼驗證$this是否代表當(dāng)前對象:classUser{publicfunctioncheck($user){return$this===$user;}}$user=newUser();var_dump($user->check($user)); //輸出結(jié)果:bool(true)輸出結(jié)果true表示$this就是當(dāng)前對象。6.2.5類中的$this演示$this的使用方法:classUser{public$name='張三'; //姓名
protected$phone='123456'; //電話
private$money='5000'; //存款
publicfunctiongetAll(){
echo$this->name,'';echo$this->phone,'';echo$this->money,'';}}$user=newUser();$user->getAll(); //輸出結(jié)果:張三12345650006.2.5類中的$this
先定一個小目標!掌握構(gòu)造方法的語法,能夠使用構(gòu)造方法完成對象的初始化。6.2.6構(gòu)造方法構(gòu)造方法是一種特殊的方法,用于在創(chuàng)建對象時進行初始化操作,例如為對象的屬性進行賦值、設(shè)定默認值等,構(gòu)造方法在創(chuàng)建對象時自動調(diào)用,無須手動調(diào)用。每個類都有一個構(gòu)造方法,如果沒有顯式定義構(gòu)造方法,PHP會自動生成一個沒有參數(shù)且沒有任何操作的默認構(gòu)造方法,如果顯式定義構(gòu)造方法,默認構(gòu)造方法將不存在。6.2.6構(gòu)造方法定義構(gòu)造方法的語法格式:語法格式訪問控制修飾符function__construct([參數(shù)1,參數(shù)2,…]){
方法體}構(gòu)造方法的訪問控制修飾符默認是public6.2.6構(gòu)造方法演示構(gòu)造方法的使用方法:classUser{public$name;
publicfunction__construct($name='user'){$this->name=$name;}}$obj1=newUser();$obj2=newUser('Tom');echo$obj1->name;//輸出結(jié)果:userecho$obj2->name;//輸出結(jié)果:Tom6.2.6構(gòu)造方法
先定一個小目標!掌握析構(gòu)方法的語法,能夠使用析構(gòu)方法完成對象的銷毀。6.2.7析構(gòu)方法析構(gòu)方法在對象被銷毀之前自動調(diào)用,執(zhí)行一些指定功能或操作。例如,關(guān)閉文件、釋放結(jié)果集等。在使用unset()釋放對象或者PHP腳本運行結(jié)束自動釋放對象時,析構(gòu)方法會自動調(diào)用。6.2.7析構(gòu)方法定義析構(gòu)方法的語法格式:語法格式訪問控制修飾符function__destruct([參數(shù)1,參數(shù)2,…]){
方法體}6.2.7析構(gòu)方法演示析構(gòu)方法的使用:classUser{
publicfunction__destruct()
{
echo'執(zhí)行了析構(gòu)方法';
}}$obj=newUser();unset($obj);//輸出結(jié)果:執(zhí)行了析構(gòu)方法6.2.7析構(gòu)方法類常量和靜態(tài)成員6.3
先定一個小目標!掌握類常量的使用,能夠在類中定義類常量。6.3.1類常量類常量可以在類中保存一些不變的值。在類中使用const關(guān)鍵字可以定義類常量:語法格式訪問控制修飾符const類常量名稱='常量值';6.3.1類常量通過范圍解析操作符“::”訪問類常量:語法格式類名::類常量名稱在類中定義類常量并通過類訪問類常量:classStudent{
constSCHOOL='某學(xué)校';
//定義類常量}echoStudent::SCHOOL; //訪問類常量6.3.1類常量
先定一個小目標!掌握靜態(tài)成員的使用,能夠在類中定義靜態(tài)成員。6.3.2靜態(tài)成員如果想讓類中某個成員只保存一份,并且可以通過類直接訪問,可以將成員定義為靜態(tài)成員。靜態(tài)成員包括靜態(tài)屬性和靜態(tài)方法。靜態(tài)成員使用static關(guān)鍵字修飾。語法格式publicstatic$屬性名; //定義靜態(tài)屬性publicstatic方法名(){} //定義靜態(tài)方法6.3.2靜態(tài)成員在類外訪問靜態(tài)成員時,不需要創(chuàng)建對象,直接通過類名訪問即可:在類外訪問靜態(tài)成員類名::$屬性名; //訪問靜態(tài)屬性類名::方法名(); //訪問靜態(tài)方法(調(diào)用靜態(tài)方法)6.3.2靜態(tài)成員在類內(nèi)訪問靜態(tài)成員時,self和static關(guān)鍵字在類的內(nèi)部代替類名,當(dāng)類名發(fā)生變化時,不需要修改類的內(nèi)部代碼。6.3.2靜態(tài)成員在類內(nèi)訪問靜態(tài)成員self::$屬性名; //使用self訪問靜態(tài)屬性self::方法名(); //使用self訪問靜態(tài)方法(調(diào)用靜態(tài)方法)static::$屬性名; //使用static訪問靜態(tài)屬性static::方法名(); //使用static訪問靜態(tài)方法(調(diào)用靜態(tài)方法)演示靜態(tài)成員的定義和訪問:classStudent{
publicstatic$age='18';
publicstaticfunctionshow(){
echoself::$age;
//在類內(nèi)使用self關(guān)鍵字訪問靜態(tài)屬性
echostatic::$age; //在類內(nèi)使用static關(guān)鍵字訪問靜態(tài)屬性
}}echoStudent::$age;
//在類外訪問靜態(tài)屬性Student::show(); //在類外訪問靜態(tài)方法6.3.2靜態(tài)成員腳下留心:使用“::”和“->”訪問類成員時的區(qū)別使用“::”和“->”訪問類成員時的區(qū)別在使用“::”和“->”訪問類成員時,需要注意如下內(nèi)容:當(dāng)“::”左側(cè)是類名、self或static時,可以訪問靜態(tài)屬性和靜態(tài)方法,不能訪問非靜態(tài)屬性和非靜態(tài)方法。當(dāng)“::”左側(cè)是$this或$對象名時,可以訪問靜態(tài)屬性和靜態(tài)方法,不能訪問非靜態(tài)屬性和非靜態(tài)方法。當(dāng)“->”左側(cè)是$this或$對象名時,可以訪問非靜態(tài)屬性、非靜態(tài)方法和靜態(tài)方法,不能訪問靜態(tài)屬性。繼承6.4
先定一個小目標!掌握繼承的使用,能夠?qū)崿F(xiàn)類的繼承。6.4.1繼承的實現(xiàn)在PHP中,類的繼承是指在一個現(xiàn)有類的基礎(chǔ)上構(gòu)建一個新的類,構(gòu)建出來的新類被稱作子類或派生類,現(xiàn)有類被稱作父類或基類,子類自動擁有父類所有可繼承的屬性和方法。當(dāng)子類和父類有同名的類成員時,子類的成員會覆蓋父類的成員。6.4.1繼承的實現(xiàn)6.4.1繼承的實現(xiàn)語法格式class子類名extends
父類名{}使用extends關(guān)鍵字實現(xiàn)子類與父類之間的繼承://定義子類Man類,繼承People類classManextendsPeople{publicfunction__construct($name){$this->name=$name;}}$man=newMan('Tom');echo$man->name;
//輸出結(jié)果:Tom$man->say();
//輸出結(jié)果:Tomisspeaking6.4.1繼承的實現(xiàn)//定義父類People類classPeople{public$name;publicfunctionsay(){echo$this->name.'isspeaking';}}演示繼承的實現(xiàn):
先定一個小目標!掌握繼承的使用,能夠?qū)崿F(xiàn)有限繼承。6.4.2有限繼承有限繼承是指子類繼承父類時,受訪問控制修飾符的限制,不能繼承父類所有的內(nèi)容,而是繼承父類的部分內(nèi)容。有限繼承的內(nèi)容:6.4.2有限繼承訪問控制修飾符屬性方法public可以繼承可以繼承protected可以繼承可以繼承private可以繼承不能繼承演示有限繼承,定義People類:classPeople{
public$name='Tom'; //公有屬性
protected$age='20'; //受保護屬性
private$money='5000'; //私有屬性
publicfunctionshowName()
{
//公有方法echo$this->name;}
protectedfunctionshowAge(){ //受保護方法
echo$this->age;}
privatefunctionshowMoney(){ //私有方法
echo$this->money;}}6.4.2有限繼承定義Man類繼承People類:classManextendsPeople{publicfunctiongetProtected(){echo$this->showAge();}publicfunctiongetPrivate(){echo$this->money;$this->showMoney();}}6.4.2有限繼承實例化Man類:$man=newMan();var_dump($man);輸出結(jié)果:object(Man)#1(3){["name"]=>string(3)"Tom"["age":protected]=>string(2)"20"["money":"People":private]=>string(4)"5000"}6.4.2有限繼承通過Man類對象調(diào)用公有方法showName()、受保護方法getProtected()和私有方法getPrivate():$man->showName(); //輸出結(jié)果:Tom$man->getProtected(); //輸出結(jié)果:20$man->getPrivate(); //報錯私有屬性可以被繼承,但是無法在子類內(nèi)部訪問,私有方法不能被繼承6.4.2有限繼承
先定一個小目標!掌握重寫的使用,能夠?qū)崿F(xiàn)對類成員的重寫。6.4.3重寫重寫是指在子類中重寫父類的同名成員。重寫父類的屬性時,子類的屬性會直接覆蓋父類的屬性,父類的屬性將不存在。重寫父類的方法時,子類的方法和父類的方法同時存在,重寫的方法必須和父類的方法訪問權(quán)限一致或更加開放。通過重寫父類的方法可以實現(xiàn)擴展或修改業(yè)務(wù)邏輯的目的。6.4.3重寫演示重寫的使用方法,定義People類:classPeople{public$name='People';publicfunctionshow(){echo__CLASS__;}publicfunctionsay(){echo__CLASS__.'say';}}6.4.3重寫定義Man類繼承People類:classManextendsPeople{public$name='Man';publicfunctionshow(){echo__CLASS__;}publicfunctionsay(){echo__CLASS__.'say';}}6.4.3重寫實例化Man類,調(diào)用show()方法和say()方法:$man=newMan();var_dump($man); //object(Man)#1(1){["name"]=>string(3)"Man"}$man->show(); //Man$man->say(); //Mansay6.4.3重寫如果將Man類中say()方法的訪問控制修飾符修改為protected,再次運行程序時會報錯:Fatalerror:AccessleveltoMan::say()mustbepublic(asinclassPeople)in…多學(xué)一招:parent關(guān)鍵字parent關(guān)鍵字子類重寫父類的方法后,如果想繼續(xù)使用父類的方法,可以使用parent關(guān)鍵字配合范圍解析操作符調(diào)用父類方法。語法格式parent::父類方法();多學(xué)一招:parent關(guān)鍵字parent關(guān)鍵字在子類中調(diào)用父類方法:示例代碼<?phpclassManextendsPeople{publicfunctionshow(){
parent::show();}}
先定一個小目標!掌握靜態(tài)延遲綁定,能夠根據(jù)需求訪問靜態(tài)類成員。6.4.4靜態(tài)延遲綁定類可以自下而上調(diào)用父類方法,如果需要在父類中根據(jù)不同的子類調(diào)用子類的方法,那么就需要靜態(tài)延遲綁定。所謂靜態(tài)延遲綁定,就是在訪問靜態(tài)成員時,訪問實際運行的類的靜態(tài)成員,而不是訪問原本定義的類的靜態(tài)成員。靜態(tài)綁定使用self關(guān)鍵字來實現(xiàn),靜態(tài)延遲綁定使用static關(guān)鍵字來實現(xiàn),只適用于對靜態(tài)屬性和靜態(tài)方法進行延遲綁定。6.4.4靜態(tài)延遲綁定靜態(tài)延遲綁定的示例代碼:classPeople{publicstatic$name='People';publicstaticfunctionshowName(){
echoself::$name; //靜態(tài)綁定
echostatic::$name; //靜態(tài)延遲綁定
}}classManextendsPeople{publicstatic$name='Man';}People::showName();
//輸出結(jié)果:PeoplePeopleMan::showName();
//輸出結(jié)果:PeopleMan6.4.4靜態(tài)延遲綁定
先定一個小目標!掌握final關(guān)鍵字的使用,能夠使用final關(guān)鍵字定義最終類和類成員。6.4.5final關(guān)鍵字在類成員前面添加final關(guān)鍵字,表示這些內(nèi)容不能被修改。6.4.5final關(guān)鍵字語法格式finalclass類名
//最終類{final
publicconst常量名=常量值; //最終常量
finalpublicfunction方法名(){} //最終方法}使用final關(guān)鍵字修飾的類不能被繼承,只能被實例化,這樣的類被稱為最終類。使用final關(guān)鍵字修飾的常量,表示該類的子類不能重寫這個常量,這樣的常量被稱為最終常量。使用final關(guān)鍵字修飾的方法,表示該類的子類不能重寫這個方法,這樣的方法被稱為最終方法。演示final關(guān)鍵字的使用:classPerson{finalpublicconstAGE=18; //最終常量
finalpublicfunctionshow() //最終方法
{}}classStudentextendsPerson{publicconstAGE=20; //報錯
publicfunctionshow() //報錯
{}}6.4.5final關(guān)鍵字不能重寫Person類的最終常量不能重寫Person類的最終方法抽象類6.5
先定一個小目標!掌握抽象類的使用,能夠根據(jù)實際需求使用抽象類。6.5抽象類抽象類是一種特殊的類,用于定義某種行為,具體的實現(xiàn)需要子類完成。例如,完成跑步有多種方式,如基礎(chǔ)跑、長距離跑、減速跑等。此時,可以定義跑步類為抽象類,將基礎(chǔ)跑這些實現(xiàn)方式定義為抽象方法。6.5抽象類使用abstract關(guān)鍵字定義抽象類和抽象方法。語法格式abstractclass類名
//定義抽象類{
abstractpublicfunction方法名(); //定義抽象方法}6.5抽象類使用abstract修飾類或方法時還應(yīng)注意以下6點:①抽象方法是特殊的方法,只有方法定義,沒有方法體。②含有抽象方法的類必須被定義成抽象類。③抽象類中可以有非抽象方法、屬性和常量。④抽象類不能被實例化,只能被繼承。⑤子類實現(xiàn)抽象類中的抽象方法時,訪問控制修飾符必須與抽象類中的一致或者更寬松。⑥子類繼承抽象類時必須實現(xiàn)抽象方法,否則也必須定義成抽象類,由下一個繼承類實現(xiàn)。6.5抽象類演示抽象類和抽象方法的使用:abstractclassHuman{abstractprotectedfunctioneat();}abstractclassManextendsHuman{}classBoyextendsMan{publicfunctioneat(){echo'eat';}}6.5抽象類接口6.6
先定一個小目標!掌握接口的實現(xiàn),能夠定義和實現(xiàn)接口。6.6.1接口的實現(xiàn)接口用于指定某個類必須實現(xiàn)的功能,接口通過interface關(guān)鍵字來定義。在接口中,所有的方法只能是公有的,不能使用final關(guān)鍵字修飾。語法格式interface接口名{const常量名=''; //接口常量
publicfunction方法名(); //接口方法}6.6.1接口的實現(xiàn)接口的方法體沒有具體實現(xiàn),需要通過某個類使用implements關(guān)鍵字來實現(xiàn)接口。語法格式class類名implements
接口名{}6.6.1接口的實現(xiàn)演示接口的定義和實現(xiàn):interfaceHuman{constNAME=''; //接口常量
publicfunctioneat(); //接口方法}classManimplementsHuman{publicfunctioneat() //實現(xiàn)接口方法
{}}6.6.1接口的實現(xiàn)
先定一個小目標!掌握接口的繼承,能夠根據(jù)實際需求使用接口繼承。6.6.2接口的繼承接口可以被繼承,從而實現(xiàn)接口的成員擴展。類只能繼承一個父類,也就是單繼承,接口可以實現(xiàn)多繼承,一次繼承多個接口,使用逗號分隔多個接口。語法格式interfaceA{}interfaceB{}//接口繼承interfaceCextendsA{}//接口多繼承interfaceDextends
A,B{}6.6.2接口的繼承演示接口繼承的使用方法:interfaceHuman{publicfunctionwalk();publicfunctiontalk();}interfaceAnimal{publicfunctioneat();publicfunctiondrink();}interfaceMonkeyextendsHuman,Animal{publicfunctionsleep(){};}6.6.2接口的繼承本章小結(jié)本章首先講解了面向?qū)ο蠛皖惻c對象的使用,接著講解了類常量和靜態(tài)成員,最后講解了繼承、抽象類和接口。通過學(xué)習(xí)本章的內(nèi)容,讀者應(yīng)能夠理解面向?qū)ο笏枷?,掌握面向?qū)ο蟮幕菊Z法,使用面向?qū)ο笏枷刖幊?。本章小結(jié)第7章PHP框架基礎(chǔ)(上)《PHP網(wǎng)站開發(fā)實例教程(第3版)》學(xué)習(xí)目標/Target
了解框架的概念,能夠說出什么是框架。
熟悉常見的PHP框架,能夠列舉常見的PHP框架。
掌握MVC設(shè)計模式,能夠在自定義框架中實現(xiàn)MVC設(shè)計模式。學(xué)習(xí)目標/Target
掌握框架單一入口和路由的實現(xiàn)方式,能夠在自定義框架中實現(xiàn)單一入口和路由。
掌握命名空間的使用方法,能夠定義、訪問和導(dǎo)入命名空間。
掌握自動加載的使用方法,能夠注冊自動加載函數(shù)和自動加載方法。章節(jié)概述/Summary在項目開發(fā)中,為了提高開發(fā)效率,節(jié)省編寫底層代碼所花費的時間,開發(fā)者一般會使用框架開發(fā)項目。要想深入學(xué)習(xí)框架,需要先掌握框架的基礎(chǔ)知識。本章將對PHP框架的基礎(chǔ)知識進行講解。目錄/Contents7.17.27.3初識框架MVC設(shè)計模式框架的單一入口和路由7.4命名空間7.5自動加載初識框架7.1
先定一個小目標!了解框架的概念,能夠說出什么是框架。7.1.1框架概述7.1.1框架概述為什么使用框架?由于每個人的編程習(xí)慣各有不同,當(dāng)一個項目需要多個人同時參與開發(fā)和維護時,就容易出現(xiàn)問題。例如,開發(fā)人員小明定義了一個$user變量,開發(fā)人員小紅也定義了一個$user變量,當(dāng)合并代碼時,兩個變量命名沖突,程序出錯。雖然看似是很小的問題,但是如果項目有成千上萬行代碼,開發(fā)人員就需要花費大量的時間去排查問題。7.1.1框架概述框架是一種遵循通用的代碼規(guī)范,采用特定設(shè)計模式編寫的代碼文件集合,用于為項目開發(fā)提供基礎(chǔ)支撐。使用框架的優(yōu)點:在項目開發(fā)初期方便開發(fā)人員快速、高效地搭建系統(tǒng)。在項目開發(fā)過程中,開發(fā)人員將注意力專注于業(yè)務(wù)實現(xiàn),無須過多考慮項目底層架構(gòu),節(jié)省時間。在項目維護升級時,框架具有靈活性和可維護性,能夠根據(jù)需求調(diào)整,保證項目維護升級。使用框架的缺點:會導(dǎo)致項目的復(fù)雜度增加、運行效率降低等問題。7.1.1框架概述在開發(fā)時,不可一味地生搬硬套,要根據(jù)具體情況決定是否使用框架以及使用什么框架。
先定一個小目標!熟悉常見的PHP框架,能夠列舉常見的PHP框架。7.1.2常見的PHP框架7.1.2常見的PHP框架2.Yii一款快速、高效、基于組件的PHP框架,實現(xiàn)了MVC設(shè)計模式,并基于該模式組織代碼。1.Laravel采用MVC設(shè)計模式,具備敏捷開發(fā)特質(zhì),支持Composer,提倡代碼重用,保證代碼簡潔性與優(yōu)雅性。3.Symfony具有穩(wěn)定性、長久性、靈活性、組件可復(fù)用、速度快、性能高等特性而備受關(guān)注。4.ThinkPHP在國內(nèi)使用較多的開源PHP框架。靈活、高效、擁有完善的技術(shù)文檔,成為國內(nèi)非常受歡迎的PHP框架之一。MVC設(shè)計模式7.2
先定一個小目標!了解MVC設(shè)計模式,能夠說出MVC設(shè)計模式的工作流程。7.2.1MVC概述MVC是一種軟件設(shè)計模式,到目前為止,MVC已經(jīng)成為一種廣泛流行的軟件設(shè)計模式。MVC采用了人類分工協(xié)作的思維方法,將程序中的功能實現(xiàn)、數(shù)據(jù)處理和界面顯示分離,從而在開發(fā)復(fù)雜的應(yīng)用程序時,開發(fā)者可以專注于其中的某個方面,進而提高開發(fā)效率和項目質(zhì)量。MVC設(shè)計模
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專用型配電柜買賣雙方協(xié)議條款版
- 2024版專業(yè)咨詢服務(wù)協(xié)議書
- 2024服裝貨品空運出口協(xié)議
- 2024年食品原料供貨合同8篇
- 職業(yè)學(xué)院網(wǎng)站新媒體平臺審批備案登記表
- 專項運營維護服務(wù)協(xié)議范本一
- 福建省南平市武夷山第三中學(xué)高二地理聯(lián)考試題含解析
- 福建省南平市吳屯中學(xué)2020-2021學(xué)年高三英語上學(xué)期期末試卷含解析
- 2024年編:林業(yè)產(chǎn)品購銷協(xié)議
- 勞動節(jié)銷售提升策略
- 2024年08月云南省農(nóng)村信用社秋季校園招考750名工作人員筆試歷年參考題庫附帶答案詳解
- 防詐騙安全知識培訓(xùn)課件
- 心肺復(fù)蘇課件2024
- 2024年股東股權(quán)繼承轉(zhuǎn)讓協(xié)議3篇
- 2024-2025學(xué)年江蘇省南京市高二上冊期末數(shù)學(xué)檢測試卷(含解析)
- 2025年中央歌劇院畢業(yè)生公開招聘11人歷年高頻重點提升(共500題)附帶答案詳解
- 2024年認證行業(yè)法律法規(guī)及認證基礎(chǔ)知識
- XX水庫工程度汛方案專家組評審意見
- 支部委員候選人表
- 美國標準公司章程范本
- 用友NC系統(tǒng)下現(xiàn)金流量項目的輔助核算
評論
0/150
提交評論