文章目錄
|
|
PHP 入門沒啥好說的,會基本編碼,基本的開發結構(一般指MVC,呵呵噠),類與對象,就差很少了,能夠說是入門了。php
寫 PHP 最多目前無非就是 OOP,面向對象,說時遲那時快。不開玩笑地說,與我共事的某些前輩是連 OOP 都搞不清的,這裏我就很少說了。html
其實不是說必定要會,要去理解 OOP,只是若是你理解這個玩意,對於你後面的工做已經學習會很是的有好處。laravel
其實面向對象也沒有那麼複雜,只要理解一點,單一職責,其實就是一個對象越簡單越好。算法
也就是說,是本身該作就由本身作,不應由本身作的就不要本身作。編程
老梗了,所謂 MVC 不少人會說 Model, View, Controller, 其實這樣說沒錯的,只是這樣說不會讓你更好地理解結構以及擴展性。segmentfault
MVC 我當前的理解是:調用(度),也很簡單,其餘框架也差很少這個原理,固然每一個框架的實現方式都不同。後端
基本流程:設計模式
+--------------+ +-----------+ +--------------+ +--------------+ | | ----+ request +----> | | ------------> | | | | +-----------+ | | | | | Request | | Route Match | | Handle | | | +-----------+ | | +----------+ | | | | <----+ Response +----- | | <-+ Response +-- | | +--------------+ +-----------+ +--------------+ +----------+ +--------------+
大體列了下最基礎的框架底層原理,實際上我們開發中 90% 接觸的只是在 Handle
處的工做,至於 Request
、 Match
、 Route
等基礎的對象或者數據,框架早已經封裝好了,也無需過分糾結和頭疼這方面的事情,先要把業務功能處理好,而且容錯處理好便可。瀏覽器
簡單總結一句話:知其然而不知其因此然。緩存
進階這個真是個頭疼的問題,啥叫進階,個人理解是,作一些以前沒有作過的(指本領域:PHP),例如:設計模式,SPL,緩存設計(Cache),研究框架,開發規範,單元測試,行爲驅動開發,組件(包括本身着手開發的),Composer 等等的東西,均可以理解爲進階。
框架推薦:
PHP 開發規範(PSR):
PHPUnit & TDD/BDD:
設計模式:
SPL:
Composer:
歡迎補充
設計模式,一個在軟件設計中佔有重要角色的課程,而咱們又不得不去了解。而對於設計模式來講,不少人是抗拒的,由於他和普通的開發者有着不同的思惟方式,一個很明顯的提高就是: 設計,而設計應該是根據發展的變化而變化,業務的變化而變化,模式也同樣,不會是永恆不變的。惟一不變的是,基礎,這些技巧與思惟少不了的是須要良好的基礎。
因此說,基礎是多麼重要的,任何一切的一切都是創建與基礎之上,這叫積累。如同蓋樓。
在這些已有基礎,咱們須要學習而且還須要學會各類推陳出新,這樣纔可讓本身讓他人走得更遠。
設計模式學習推薦: 設計模式
當今互聯網,每秒鐘都是錢,能節省的,絕對不能浪費,並且節省還能夠必定地提升服務的質量。
通常咱們說的資源是:
內存
帶寬
磁盤
CPU
而這些之間實際上是有必定的關聯的,和代碼質量和容錯機制也有必定關係。
上述每個都很重要,決定着你的服務質量。
能少佔用內存就少佔用內存,圖片、媒體資源能壓縮就壓縮,減小無用的存儲,下降代碼的複雜度。
比較常見的是: file_get_contents
,connection
,有時候咱們會很天然地遺忘這裏其實會有必定概率出現超時,最嚴重的就是形成服務無響應,以下代碼:
file_get_contents('https://www.google.com/');
這代碼分分鐘被打,活生生將程序毀了。
若是發生超時,會佔用大量 CPU,嚴重可能會致使服務無響應,危害極大。
容錯是每一個開發者在開發過程當中必需要考慮的地方,沒有代碼沒有 「八阿哥」,總會有意外的地方,作好容錯能夠最大程度地減小對用戶的傷害以及能夠有效提升在出錯時的用戶體驗。百利而無一害。
日誌,一個很容易被無視而又很是很是重要的環節,能夠說,這一環節比你作的任何一個地方的業務代碼都要重要。
日誌的好處:
記錄,跟蹤
調試
恢復
分析
調優
等等...
好處有好多,但在咱們開發者當中,其日誌最重要的功能之一就是,記錄問題,調試代碼,優化架構。
不得不說日誌的重要性,請你好好重視這一個容易被忽略的環節。
而日誌的設計須要考慮性能,不能由於日誌而影響服務質量哦。因此在日的環節在完整性和效率上要作好權衡。
緩存必須是針對業務狀況而設計,不能生搬硬套。大公司的不必定適合你,開源方案也不必定不適合你,必定要找到本身合適的方案。
而在緩存設計方面,我我的推薦這一系列的文章: 緩存使用與設計
通俗簡單地說,緩存的目的是爲了提升服務的響應速度以及質量,不能由於緩存的添加而致使服務異常。
咱們平時開發接觸不一樣的開發工具,操做,甚至是監控,那麼他們其中的原理,你又理解麼?
其實咱們天天接觸的東西都有它的實現原理,算法等等的東西,但咱們一直都在使用,並無很好地去理解他們當中的奧祕。時候有空去接觸一下了。
首先,開發,編碼我以爲就是將現實生活搬到互聯網中,我舉個例子:
爲何人訪問量上來了,我們就要擴容,去擴展呢?原理很簡單,看看我們超市裏面的收銀臺就知道了。我們超市裏面全部收銀臺不是天天每一個位置都有人的,根據人流(流量)動態擴容,並且有些收一臺的一個位置上設置有兩我的(多線程/多進程,看我的理解),這個設計挺妙的。當人一多,就會開多各個位置收銀臺,和增長人手。那他是怎麼知道人多的呢?也很簡單,就是經理(Manager/Master進程或者是運維,看理解),他知道,內部調度安排人手。
大體舉了這麼一個例子來講明擴展的原理。
回到正題: 框架
相信你們都有接觸過不少不一樣的框架,CI, TP, Symfony, Yii, Laravel, Slim等等,最深入,最類似的地方在哪裏呢?可能有些沒有,可是,有一點能夠確定的,就是,都是有一系列 Http 封裝,Route 處理。由於這兩是靈魂,剩下的是否是業務和結構。
剩下的就是考驗框架代碼質量的時候了,這裏有一系列的框架,有的輕量,有的重量,有的靈活,有的高效。其實說到這裏不少朋友都大概瞭解框架的運行原理。
我看過Symfony、Laravel、CI、Silex和ThinkPHP的代碼,固然很粗略地看看。裏面實現的大部分代碼都是將各個處理模塊 「粘合」 一塊兒,也就是 "Bridge"。
大體流程圖:
+----------+ +-------------+ +------------+
| | | | | |
| Client |---------->| Application |--------------------->| Start |
| | | | | |
+----------+ +-------------+ +------------+
^ |
| |
| v
| +-------------+ +-------------+
| | | | |
| | Container |------------>| Bootstrap |-----+
| | | | | |
| +-------------+ +-------------+ |
| ^ | +------------+
| +-------+--------+ | | |
| | | +---->| Request |
| +-----------+ +-----------+ | |
| | | | | +------------+
| | Route | | Service | |
| | | | | |
+----------------+ +-----------+ +-----------+ +-------------+ | | | | | | | Response | | Dispatcher | | | |<----------------------------------------------| |<---------------+ | | | | +----------------+ +-------------+ ^ | +--------------+ | | | v | +----------+ | | | +--------|Controller| | | +----------+
當你瞭解了這些流程以及所需的組建,用先用的組件的話都是能夠很方便地組合出本身想要的框架。
其實我這裏但願更多的初學者多看看 ThinkPHP 的代碼,而後也看看其餘開源框架的代碼,你會發現,除了 ThinkPHP 以外,你還能夠發現更多新奇好玩的東西。
最終其實仍是離不開本身動手開發一個。
具體框架開發系列我會找個時間與你們分享。框架的理解可謂到一段落,下次我會分享我對其餘服務器的理解。
來到這個階段的,應該始終有一個意識:服務質量高於一切,就是不能由於添加服務而影響原有的服務
簡單總結一下。大量動手實踐本身的猜測,分析本身作過的項目而且優化本身以爲不足的地方。
總結: 知其然而且知其因此然。
我相信通過九九八十一難,能來到這個模式的人已經很少了。我本身仍是菜鳥,不敢在這裏胡說,這裏會記錄我全部的 PHP 底層學習的通過,這裏的故事,我想我等不到下一個故事了。
Unix 環境高級編程
tcp/ip 網絡編程
PHP 擴展開發
頸椎病康復指南
活着
爲何要理解並學習這一方面的知識?若果你是一名有追求的 PHP 開發者,最終仍是應該將精力落入到 「系統」 處,由於真正處理 PHP 程序的,正正是 「系統」,如何可讓本身的 PHP 作得更好,如何可讓本身的服務作的更好,如何可讓後端支持更增強大,靈活,高效,你就應該關注到底層系統的實現當中,但平時也不要忘了 PHP 的開發規範。
此處的文章和筆記,我將會在之後的 Unix 學習一系列當中給你們呈現。
在平常生活中,Http
已經離不開你們了,從平時打開應用,打開瀏覽器,搜索,都是須要使用 Http
,應該沒有比這個接觸更多了吧。可是裏面的奧祕你又知道多少?不要緊,和我一塊兒探索 TCP/IP
的奧祕吧。
文章和筆記,之後會在 TCP/IP 章節中給你們呈現.
學習擴展開發和學習 PHP 是同樣同樣的,根據 PHP 手冊上的流程...
語言參考
基本語法
類型
變量
常量
表達式
運算符
流程控制
函數
類與對象
命名空間
Errors
異常處理
生成器
引用的解釋
預約義變量
預約義異常
預約義接口
上下文(Context)選項和參數
支持的協議和封裝協議
看到這裏應該要懂得觸類旁通的了,後面的看大家的造化了......
此處的文章和筆記,我將會在之後的 PHP 擴展開發 學習一系列當中給你們呈現。
這些系列文章可能不會太快給你們呈現,由於除了工做還有生活,我但願你們能夠共同進步,一塊兒去分享相關的經驗和知識。感恩你們。