這篇文章主要講解了“PHP核心技術有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP核心技術有哪些”吧!
一、面向對象思想的核心概念
1.面向對象思想的核心思想是對象、封裝、可重用性和可擴展性。面向對象是建立在面向過程之上的更高層次的抽象。
2.面向對象和具體的語言無關。
A.百度對象的“形”與“本”
1.類是我們對一組對象的描述
①類定義了一系列的屬性和方法,并提供了實際的操作細節,這些方法可以用來對屬性進行加工
②對象含有類屬性的具體值,這就是類的實例化
②類與對象的關系似一種服務與被服務、加工與被加工的關系
2.所謂序列化,就是把保存在內存中的各種對象狀態(屬性)保存起來,并且在需要時可以還原出來
3.對象和數組的區別在于:對象還有個指針,指向了它所屬的類
4.對象和類:
①類是定義一系列屬性和操作的模板,而對象則把屬性進行具體化,然后交給類處理
②對象就是數據,對象本身不包含方法,但是對象有一個“指針”指向一個類,這個類里面可以有方法
③方法描述不同屬性所導致的不同
④類和對象不是可分割的,有對象就必定有一個類和其對應,否則這個對象也就成了沒有親人的孩子
B.魔術方法應用
1.魔術方法是以兩個下劃線開頭、具有特殊作用的一些方法,可以看做PHP的“語法糖”。
2.php的重載與Java的不同,構造函數不屬于重載,而__set、__get屬于重載。php的重載指動態地“創建”類屬性和方法。
3.當調用一個不可訪問的方法(如未定義或不可見)時,__call()會被調用,實際 上,魔術方法使方法的動態創建變為可能,這在MVC等框架設計中是很有用的語法。
C.繼承與多態
1.用“::”訪問一個非靜態方法不符合語法,但PHP仍然能夠正確地執行代碼,這只是PHP的一個“兼容“或者說是”讓步”,修改error_reporting打開e_strict報錯就會出錯
2.耦合是一個軟件結構內不同模塊之間互連程序的度量,也就是不同模塊之間的依賴關系
低耦合是指模塊與模塊之間,盡可能地例模塊間獨立存在;模塊與模塊之間的接口盡量少而簡單
更傾向于使用組合,因為:
①繼承破壞封裝性
②繼承是緊耦合的
③繼承擴展復雜
④不恰當地使用繼承可能違反現實世界中的邏輯
3.組合需要一一創建局部對象,增加代碼量
4.如何使用繼承:
①精心設計專門用于被繼承的父類,繼承樹穩定,不超過3層
②對于不是專門用于被繼承的類,禁止其被繼承
③優先考慮用組合關系提高代碼的可重用性
④子類是一種特殊的類型,而不只是父類的一個角色
⑤子類擴展,而不是覆蓋或者使父類的功能失效
⑥底層代碼多用組合,頂層/業務層代碼多用繼承
5.多態:同一類的對象收到相同消息時,會得到不同的結果,而這個消息是不可預測的,顧名思義,就是多種狀態,多種結果。
6.多態的真正意義是:在實際開發中,只要關心一個接口或基類的編程,而不必關心一個對象所屬于的具體類。
7.PHP是弱類型的,并且也沒有對象轉換機制,所以不能像C++或Java那樣實現派生類對象賦值給基類對象(calss a = new class b),所以PHP的父類重載不是多態。PHP的接口實現屬于多態。
8.區別是否多態的關鍵在于看對象是否是同一類型。多態的本質就是if...else,只不過實現的層級不同。
D.面向接口編程
1.接口定義一套規范,描述一個“物”的功能,要求如果現實中的“物”想成為可用,就必須實現這些基本功能。接口這樣描述自己:“對于實現我的所有類,看起來都應該像我現在這個樣子”?!敖涌跒槌橄蠖?。因此,在程序里,接口的方法必須被全部實現,否則將報fetal錯誤。
2.接口不僅規范接口的實現者,還規范接口的執行者,不允許調用接口中本不存在的方法。當然這并不是說一個類如果實現了接口,就只能實現接口中才有的方法,而是說,如果針對的是接口,而不是具體的類,則只能按接口的約定辦事。
3.PHP的接口在“面向契約編程”中是不足的,可以淡化為設計文檔,起到一個團隊基本契約的作用。由于PHP是弱類型,且強調靈活,所以并不推薦大規模使用接口,而是僅在部分“內核”代碼中使用接口。
4.接口本身什么也不做,系統悄悄地在內部實現了接口的行為。Traits可以被視為一種加強型的接口。
E.反射
1.直觀理解就是根據到達地找到出發地和來源。在PHP運行狀態中,擴展分析PHP程序,導出或提取出半天類、方法、屬性等的詳細信息,包括注釋。這種動態獲取信息以及動態調用對象方法的功能稱為反射。
2.反射不僅可以用于類和對象,還可以用于函數、擴展模塊、異常等
3.用一反射的地方:一個是對對象進行調試,另一個是獲取類的信息。反射的消耗很大,在可以找到替代方案的情況下,就不要濫用。
4.很多時候,善用反射能保持代碼的優雅和簡潔,但反射也會破壞類的封裝性,因為反射可以使本不應該暴露的方法或屬性被強制暴露了出來,這既是優點也是缺點。
F.異常和錯誤處理
1.PHP里的異常,是程序運動中不符合預期的情況及與正常流程不同的狀況。一種不正常的情況,就是按照正常邏輯不該出錯,但仍然出錯的情況,這屬于邏輯和業務流程的一種中斷,而不是語言錯誤。PHP里的錯誤則屬于自身問題,是一種非法語法或者環境問題導致的、讓編譯器無法通過檢查甚至無法運行的情況。
2.在PHP里,任何自身錯誤都會觸發一個錯誤,而不是拋出異常(對于一些情況,倒同時拋出錯誤和異常)。PHP一旦遇到非正常代碼,通常都會觸發錯誤,而不是拋出異常。在這個意義上,如果想使用異常處理不可預料的問題,是辦不到的。比如,想在文件不存在且數據庫鏈接打不開時觸發異常是不可行的,這在PHP中作為錯誤拋出,而不會作為異常自動捕獲。
3.PHP通常是無法捕獲有意義的異常的,它把所有不正常的情況都視為了錯誤,你要想捕獲這個異常,就得使用if...else結構。
4.什么時候使用異常處理機制:
①對程序的悲觀預測
②程序的需要和對業務的關注:異常處理機制可以把每一件事當做事務考慮,還可以把異??闯梢环N內建的恢復系統
③語言級別的健壯性要求:try..catch的好處就是,可以把異常千萬的邏輯中斷破壞降到最小范圍內,并且經過補救處理后不影響業務邏輯的完整性;亂拋異常和只拋不捕獲,或捕獲而不補救,會導致數據混亂。
5.PHP錯誤就是會使腳本運行不正常的情況,錯誤級別:
①deprecated:表示“不推薦,不建議”
②notice:語法中存在不當的地方
③warning:在語法中出現很不恰當的情況時,比如函數參數不匹配等,要修改代碼
④fetal error:致命錯誤,直接導致php流程終結,后面的代碼不在執行,必須修改代碼
⑤prase error:語法解析錯誤,導致PHP代碼無法通過語法檢查
6.PHP中的錯誤處理:
①set_error_handler()設置用戶自定義的錯誤處理函數,如果使用該函數,會繞過php的錯誤處理函數,可以使用restore_error_handler()取消接管
②trigger_error函數可以拋出錯誤
二、面向對象的設計原則
A.單一職責原則(SRP):就一個類而言,應該只有一個引起它變化的原因。就是怎么樣設計類以及類的方法界定的問題。
一是避免相同的職責分散到不同的類中,另一個是避免一個類承擔太多的職責。
為什么要遵守SRP呢?
①可以減少類之間的耦合
②提高類的復用性
2.工廠模式:在代碼執行時實例化對象,負責生產對象,根據不同的參數生成不同的實例化對象。
3.命令模式:分離命令請求者和命令實現者。
4.一直簡單的應該遵循的做法:
①根據業務流程,把業務對象提煉出來
②職責的分類需要注意
B.接口隔離原則(ISP):如果一個模塊包含多個子模塊,那么我們應該小心對該模塊做出抽象;表明客戶端不應該被強迫實現他們不會使用的接口,應該把胖接口中的方法分組,然后用多個接口代替它,每個接口服務于一個子模塊,簡單地說,就是使用多個專門的接口比使用單個接口要好得多。
1.主要觀點:
①一個類對另外一個類的依賴性應當是建立在最小的接口上的。ISP可以達到不強迫客戶依賴于他們不用的方法;ISP還可以降低客戶之間的相互影響
②客戶端程序 不應該依賴它不需要的接口方法(功能)
2.ISP強調的是接口對客戶端的承諾越少越好,并且要做到專一。
3.接口污染:過于臃腫的接口設計是對接口的污染。就是為接口添加不必要的職責,如果 開發人員在接口中增加一個新功能的主要目的只是減少接口實現類的數目,則此設計將導致接口被不斷地“污染”并“變胖”?!敖涌诟綦x”其實就是定制化服務設計的原則。
處理方法:
①利用委托分離接口
②利用多繼承分離接口
C.開放-封閉原則:
1.定義:
open:模塊的行為必須是開放的、支持擴展的,而不是僵化的
closed:在對模塊的功能進行擴展時,不應該影響或大規模地影響已有的程序模塊
2.也就是要求開發人員在不修改系統中現有功能代碼的前提下,實現對應用系統的軟件功能的擴展;一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的
3.如何遵守開放-封閉原則:核心思想就是對抽象編程,而不對具體編程,因為抽象相對穩定。讓類依賴于固定的抽象,這樣的修改就是封閉的;而通過面向對象的繼承和多態機制,可以實現對抽象體的繼承,通過覆寫其方法來改變固有行為,實現新的擴展方法,所以對于擴展就是開放的。
①在設計方面充分應用“抽象”和“封裝”的思想
②在系統功能編程實現方面應用面向接口的編程
D.替換原則(LSP,里氏替換原則):子類必須能夠替換成它們的基類
1.定義:子類型必須能夠替換掉它們 的父類型、并出現在父類能夠出現的任何地方。一個軟件裸體如果使用一個基類的話,那么一定適用于其子類,而這根本不能察覺出基類對象和子類對象的區別。
2.如何遵守:
①父類的方法都要在子類中實現或者重寫,并且派生類只實現其抽象類中聲明的方法,而不應該給出多余的方法定義或實現
②在客戶端程序 中只應該使用父類對象而不應當直接使用子類對象,這樣可以實現運行期綁定
3.PHP對LSP的支持并不友好,缺乏向上轉型等概念,只能通過一些曲折的方法實現。
E.依賴倒置原則:就是將依賴關系倒置為依賴接口
1.定義:
①上層模塊不應該依賴于下層模塊,它們共同依賴于一個抽象
②抽象不能依賴于具體,具體應該要依賴于抽象
2.抽象一般是相對穩定或者相對變化不頻繁的,而具體是易變的。
3.IOC是依賴倒置原則的同義詞,依賴注入(DI)和依賴查找(DS)是IOC的兩種實現。
4.PHP還沒有一個完善的IOC容器,或者說PHP不需要
5.如何滿足IOC:
每個羅高層次類都為它所需要的服務提出一個接口聲明,較低層次類實現這個接口
每個較高層類都通過該抽象接口使用服務
F.一些優于面向過程的
1.新成員的加入和融合不再困難
2.代碼即文檔
3.我們既要深入了解面向對象的思想,又不能執著于面向對象
三、正則表達式基礎與應用
A.認識正則表達式
1.PHP中有兩套正則函數:
①由PCRE庫提供的函數,以“preg_”為前輟名
②由POSIX擴展提供的函數,以“ereg_”為前輟名,PHP5.3后不推薦使用
2.在PHP里,一個正則表達式分為三個部分:分隔符、表達式和修飾符
四、PHP網絡技術及應用
A.HTTP協議詳解
1.HTTP就是一個基于應用層的通信規范:從WWW服務器傳輸超文本到本地瀏覽器,由請求和響應構成。是一個無狀態的協議,同一個客戶端的這次請求和上次請求沒有對應關系。屬于典型的問答式交互。
2.SPDY協議,優化了瀏覽器和服務器之間的通信,支持流復用,具備優先級的請求、主動發起請求、強制SSL安全傳輸等先進特性。
3.HTTP工作流程:
①客戶機與服務器建立連接
②建立連接后,客戶機發送一個請求給服務器。格式為:前面是統一資源標識符(URL)、中間是協議版本號,后邊是MIME信息(包括請求修飾符、客戶機信息和可能的內容)
③服務器接到請求后,給予相應的響應信息。格式為:首先是一個狀態行(包括信息的協議版本號、一個成功或錯誤的代碼),然后是MIME信息(包括服務器信息、實體信息和可能的內容)
④客戶端接收服務器返回的信息并顯示 在用戶的顯示屏上,然后客戶機與服務器斷開連接
4.垃圾信息防御措施
①IP 限制
②驗證碼
③Token和表單欺騙
④審核機制
B.抓包工具:Fiddler
C.Socket進程通信機制及應用
1.Scoket通常稱為“套接字”,用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通過套接字向網絡發出請求或者應答網絡請求。Socket既不是一個程序,也不是一種協議,其只是操作系統提供的通信層的一組抽象API。
2.PHP的語言特性和自身定位決定了它只適合做客戶端
3.注意:
①fsockopen的第一個參數$hostname不要帶“http://”,除非使用SSL等
②Headers請求不一定都要按照抓包數據全部帶上,除非調用不成功或者不熟練或者有特殊需求
③在Connection和data后有兩個換行
④有些表單請求可能有hidden值
⑤注意編碼問題
D.cURL工具及應用
1.建立cURL請求的基本步驟
①初始化
②設置選項,包括URL
③執行并獲取 HTML文檔內容
④釋放cURL句柄
2.curl_getinfo()對調試很有用
E.簡單郵件傳輸協議SMTP
1.SMTP是由源地址到目的地址傳送郵件的一組規則,用來控制信件的中轉方式。
F.WebService的前世今生
1.WebService
2.PHPRPC協議
G.Cookie詳解
1.Cookie在遠程瀏覽器存儲數據并以此跟蹤和識別用戶的機制。從實現上說,Cookie是存儲在客戶端上的一小段數據 ,瀏覽器(既客戶端)通過HTTP協議和服務器端進行Cookie交互。
2.使用PHP設置Cookie其實就是發出命令讓瀏覽器來設計Cookie而已
3.注意:
①cookie函數有一個返回值,如果是false,代表設置失敗,但是僅供參考
②由php在當前頁設置的cookie不能立即生效,要下一個頁面才能看到
③cookie沒有顯式的刪除函數
4.cookie跨域需要P3P設置
①頁面的cookie不能是瀏覽器進程的cookie
②利用iframe時,要在相應的動態頁的頁頭添加一下p3p的信息
③ie對跨域訪問cookie限制比較嚴格
5.本地localStorage存儲
H.Session詳解
1.session_set_save_handler()改變session存儲的方式
2.sessionid默認作為一個cookie存儲在客戶端
感謝各位的閱讀,以上就是“PHP核心技術有哪些”的內容了,經過本文的學習后,相信大家對PHP核心技術有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。