爲了本身對php的系統全面深刻的掌握,我經過我的經驗,以及搜索網上高手經驗,彙總了一份php自我學習路線規劃,包括實戰演練、學習建議、高手進階、常見問題和測試總結五塊。算是一個系統的學習計劃和目標吧。
避免盲目學習,對提升有所指引。但願自我加壓,經過努力修煉達到高手水平。天道酬勤,自我勉勵!此路線僅適合我本人。javascript
部分摘自博客,參看:【原創】PHP程序員的技術成長規劃 http://blog.csdn.net/heiyeshuwu/article/details/40098043
這個php成長規劃清晰明確,很是專業。
-------------------------------------------------------------
1、實戰演練
熟悉語法&api -> 閱讀zend、ci、wordpress源碼 -> 用PHP獨立開發項目 -> 深刻了解PHP引擎實現細節、擴展編寫、性能優化等php
(1周)HTML+CSS HTML5+CSS3
(2-3天)留言板或記事本,(增刪改查,數組函數數據庫函數)
(7天)bbs或企業網站,(模板、分頁、權限)phpchina的高手PHP高手帶路--問題彙總解答以及PHP手冊
(1個月)學習discuz學習外國的開源程序(zencert Joomla drupal).學習phpchina上的精華知識。
(1個月)深刻學習zf框架(增刪改查,權限控制,前端模板頁面等)
(長期總結)對本身作過的小項目進行總結,用面向對象思想,對結構優化。
看開源的框架源碼(這步請注意找一些比較小巧的開源框架如 CI,Slim ),加強對 MVC 的理解
更加深刻的系統的學習(MySQL Linux C 語言 javascript html css redis 等)css
最緊要實戰:
(2周)3個站(至少20個美工頁面)psd to html 切制練習。
(1周)jquery實戰演習
(1月)用zf框架,開發模塊,達到靈活掌握html
必須掌握的知識點:
數據庫必須熟練掌握 mysql & sqlserver,同時必須熟練zendstdio的操做。
熟練進行phpmyadmin的操做。
adodb(數據庫接口)+javascript+xml+ajax(異步JavaScript和XML)+jquery(JS框架),
熟悉OOP編程,學習thinkphp,zf框架,學習smarty模板引擎,pear (PHP擴展與應用庫),prototype(設計模式)。
對apache也應該買本管理員手冊好好看看。
同時大體瞭解一下linux等等。以及服務器管理等操做。
-------------------------------------------------------------
2、學習建議前端
"函數參考"那部分沒必要全看,可是 日期與時間、文件系統、其它基本擴展、Session、變量與類型 這幾部分建議必定要翻一下,裏面介紹了不少經常使用的函數和類。
這些函數沒必要都記住,只要有個印象就行,之後用到時再回來翻,用的多了天然就記住了。
先從留言本作起,再作個我的博客,而後再作個複雜點兒的CMS,或者小OA,所謂經驗,其實就是解決問題的方法,從項目中不斷思考,就能不斷收穫!
想學好PHP OOP, 直接上Zend Framework 2,半年後你會覺得本身進步許多
總結:自學很是重要,實際項目經驗也很重要。不要覺得計算機基礎不重要,學習計算機基礎對學習編程語言很是有用。只要對本身狠一點,多下功夫,沒有攻不破的東西。java
1基礎PHP程序員
重點:把LNMP搞熟練(核心是安裝配置基本操做)
目標:可以完成基本的LNMP系統安裝,簡單配置維護;可以作基本的簡單系統的PHP開發;可以在PHP中型系統中支持某個PHP功能模塊的開發。
基本語法數組、字符串、數據庫、XML、Socket、GD/ImageMgk圖片處理等等;熟悉各類跟MySQL操做連接的api(mysql/mysqli/PDO),知道各類編碼問題的解決;知道常規熟練使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等);瞭解基本MVC的運行機制和爲何這麼作,稍微知道不一樣的PHP框架之間的區別;可以快速學習一個MVC框架。可以知道開發工程中的文件目錄組織,有基本的良好的代碼結構和風格,可以完成小系統的開發和中型系統中某個模塊的開發工做。node
2中級PHP程序員
重點:提升針對LNMP的技能,可以更全面的對LNMP有熟練的應用。
目標:可以隨時隨地搭建好LNMP環境,快速完成常規配置;可以追查解決大部分遇到的開發和線上環境的問題;可以獨立承擔中型系統的構架和開發工做;可以在大型系統中承擔某個中型模塊的開發工做;
除了第一階段的能力,安裝配置方面可以隨意安裝PHP和各類第三方擴展的編譯安裝配置;瞭解php-fpm的大部分配置選項和含義(如max_requests/max_children/request_terminate_timeout之類的影響性能的配置),知道mod_php/fastcgi的區別;在PHP方面已經可以熟練各類基礎技術,還包括各類深刻些的PHP,包括對PHP面向對象的深刻理解/SPL/語法層面的特殊特性好比反射之類的;在框架方面已經閱讀過最少一個以上常規PHP MVC框架的代碼了,知道基本PHP框架內部實現機制和設計思想;在PHP開發中已經可以熟練使用常規的設計模式來應用開發(抽象工廠/單例/觀察者/命令鏈/策略/適配器 等模式);建議開發本身的PHP MVC框架來充分讓開發自由化,讓本身深刻理解MVC模式,也讓本身可以在業務項目開發裏快速升級;熟悉PHP的各類代碼優化方法,熟悉大部分PHP安全方面問題的解決處理;熟悉基本的PHP執行的機制原理(Zend引擎/擴展基本工做機制);mysql
3高級PHP程序員
重點:除了基本的LNMP程序,還可以在某個方向或領域有深刻學習。(縱深維度發展)
目標:除了可以完成基本的PHP業務開發,還可以解決大部分深刻複雜的技術問題,而且能夠獨立設計完成中大型的系統設計和開發工做;本身可以獨立hold深刻某個技術方向,在這塊比較專業。(好比在MySQL、Nginx、PHP、Redis等等任一方向深刻研究)
做爲基礎核心技能,咱們在第二階段的基礎上面,須要有更深刻的學習和應用。從基本代碼應用上面來講,可以解決在PHP開發中遇到95%的問題,瞭解大部分PHP的技巧;對大部分的PHP框架可以迅速在一天內上手使用,而且瞭解各個主流PHP框架的優缺點,可以迅速方便項目開發中作技術選型;在配置方面,除了常規第二階段會的知識,會了解一些比較偏門的配置選項(php auto_prepend_file/auto_append_file),包括擴展中的一些複雜高級配置和原理(好比memcached擴展配置中的memcache.hash_strategy、apc擴展配置中的apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之類的);對php的工做機制比較瞭解,包括php-fpm工做機制(好比php-fpm在不一樣配置機器下面開啓進程數量計算以及原理),對zend引擎有基本熟悉(vm/gc/stream處理),閱讀過基本的PHP內核源碼(或者閱讀過相關文章),對PHP內部機制的大部分核心數據結構(基礎類型/Array/Object)實現有了解,對於核心基礎結構(zval/hashtable/gc)有深刻學習瞭解;可以進行基本的PHP擴展開發,瞭解一些擴展開發的中高級知識(minit/rinit等),熟悉php跟apache/nginx不一樣的通訊交互方式細節(mod_php/fastcgi);除了開發PHP擴展,能夠考慮學習開發Zend擴展,從更底層去了解PHP。jquery
3、高手進階linux
英文好的話推薦看 https://tutsplus.com/ (免費版本http://code.tutsplus.com/),雖然要付費(年付15美金/月),可是你獲得的將更多。
我已經持續付費兩年了,最先學php,而後跟進CI、Laravel等框架,後來學jquery、angularjs等,都在項目中實際應用了,ror、nodejs也跟着學了學,可是沒有機會使用。
老外高手作的教學不但教程安排合理,節奏比較快,不浪費你的時間並且讓你可以保持高度注意力集中,而且能夠看看高手的編程習慣和工具,學習到的都是業界最新的東西,如各類編輯器的workflow,秒殺國phper的視頻。
研究php內核
php技術架構
最好能參與php開源項目
-------------------------------------------------------------
4、常見問題
技術線(偏深度):
php常見問題列表:
1.看看簡歷,會問一些過去作的項目的用戶量、pv、吞吐量、相關難點和解決方法等
2.數據庫設計經驗,爲何進行分表? 分庫?
通常多少數據量開始分表? 分庫? 分庫分表的目的? 什麼是數據庫垂直拆分? 水平拆分? 分區等等?能夠舉例說明
3.數據庫優化有哪些? 分別須要注意什麼?
4.web開發方面會遇到哪些緩存? 分別如何優化?
5.給你256M的內存,對10G的文件進行排序(文件每行1個數字),如何實現?
對10G的文件進行查找如何實現?
統計10G文件每一個關鍵字出現的次數如何實現?
6.假如你如今是12306火車訂票的設計師,你該如何設計知足全國人民訂票?
7.假若有1億用戶的訪問量,你的服務器架構是怎樣的? 用戶信息的存儲方案如何設計?
8.若是你是技術組長,所帶團隊任務進度沒法完成你該如何解決?
若是在進度排滿的前提下插入任務,你該如何保證總進度不延期?
若是有的工程師今天預約任務沒有完成,你該如何解決?
9.從你的經驗方面談一下如何構建高性能web站點? 須要哪些環節? 步驟? 每一個步驟須要注意什麼如何優化等?
5、調試總結
我目前經常使用的調試方法:
echo 和echo "
"; print_r(method); 腳本js就是alert方式。 css調試就是弄成色塊加上邊框等
日誌方式用於沒法打印時。logToFile("my.log", "out page:".$_POST ['cpage']);
function logToFile($filename,$msg){
$fd=fopen($filename, "a");
$str="[".date("Y/m/d h:i:s",mktime())."]".$msg;
fwrite($fd, $str."\n");
fclose($fd);
}
有個調試技術的博客總結的挺全面。參看下面。
博客地址:http://blog.csdn.net/heiyeshuwu/article/details/5684307
在線查看:http://down.51cto.com/data/155822 PHP調試技術手冊發佈(1.0.0 pdf)目錄 1 內置API輸出調試 1.1 基本調試API 1.1.1 echo (print): 1.1.2 printf 1.1.3 print_r、var_dump(var_export)、debug_zval_dump 1.2 錯誤控制和日誌記錄調試 1.2.1 錯誤選項控制 1.2.2 錯誤拋出和處理 1.2.3 使用錯誤抑制符 1.2.4 日誌記錄 2 瀏覽器調試 2.1 頁面輸出調試 2.2 FirePHP 調試 2.2.1 普通變量監測 2.2.2 調用棧監測 2.2.3 監測拋出異常 2.2.4 組顯示信息 3 IDE 調試 3.1 基本經常使用IDE介紹 3.1.1 Vim 3.1.2 Zend Studio 3.1.3 Eclipse 3.1.4 NetBeans 3.2 IDE調試 3.2.1 Zend Studio + Zend Debugger 3.2.2 Eclipse (PDT) + Xdebug 3.2.3 Vim + Xdebug + DBGp 4 PHP 性能調試技術 4.1 基本時間佔用監測 4.2 使用 Xdebug 進行性能分析 4.2.1 安裝配置: 4.3 APD(Advanced PHP Debugger) 4.3.1 安裝配置 4.3.2 使用APD 4.4 使用Xhprof 進行性能分析 4.4.1 Xhprof 的優勢: 5 PHP單元測試技術 5.1 PHPUnit