爲了本身對php的系統全面深刻的掌握,我經過我的經驗,以及搜索網上高手經驗,彙總了一份php自我學習路線規劃,包括實戰演練、學習建議、高手進階、常見問題和測試總結五塊。算是一個系統的學習計劃和目標吧。
避免盲目學習,對提升有所指引。但願自我加壓,經過努力修煉達到高手水平。天道酬勤,自我勉勵!此路線僅適合我本人。
部分摘自博客,參看:【原創】PHP程序員的技術成長規劃 http://blog.csdn.net/heiyeshuwu/article/details/40098043
這個php成長規劃清晰明確,很是專業。
-------------------------------------------------------------javascript
熟悉語法&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等等。以及服務器管理等操做。
-------------------------------------------------------------前端
"函數參考"那部分沒必要全看,可是 日期與時間、文件系統、其它基本擴展、Session、變量與類型 這幾部分建議必定要翻一下,裏面介紹了不少經常使用的函數和類。
這些函數沒必要都記住,只要有個印象就行,之後用到時再回來翻,用的多了天然就記住了。
先從留言本作起,再作個我的博客,而後再作個複雜點兒的CMS,或者小OA,所謂經驗,其實就是解決問題的方法,從項目中不斷思考,就能不斷收穫!
想學好PHP OOP, 直接上Zend Framework 2,半年後你會覺得本身進步許多
總結:自學很是重要,實際項目經驗也很重要。不要覺得計算機基礎不重要,學習計算機基礎對學習編程語言很是有用。只要對本身狠一點,多下功夫,沒有攻不破的東西。
java
重點:把LNMP搞熟練(核心是安裝配置基本操做)
目標:可以完成基本的LNMP系統安裝,簡單配置維護;可以作基本的簡單系統的PHP開發;可以在PHP中型系統中支持某個PHP功能模塊的開發。
基本語法數組、字符串、數據庫、XML、Socket、GD/ImageMgk圖片處理等等;熟悉各類跟MySQL操做連接的api(mysql/mysqli/PDO),知道各類編碼問題的解決;知道常規熟練使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等);瞭解基本MVC的運行機制和爲何這麼作,稍微知道不一樣的PHP框架之間的區別;可以快速學習一個MVC框架。可以知道開發工程中的文件目錄組織,有基本的良好的代碼結構和風格,可以完成小系統的開發和中型系統中某個模塊的開發工做。
node
重點:提升針對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
重點:除了基本的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
英文好的話推薦看 https://tutsplus.com/ (免費版本http://code.tutsplus.com/),雖然要付費(年付15美金/月),可是你獲得的將更多。
我已經持續付費兩年了,最先學php,而後跟進CI、Laravel等框架,後來學jquery、angularjs等,都在項目中實際應用了,ror、nodejs也跟着學了學,可是沒有機會使用。
老外高手作的教學不但教程安排合理,節奏比較快,不浪費你的時間並且讓你可以保持高度注意力集中,而且能夠看看高手的編程習慣和工具,學習到的都是業界最新的東西,如各類編輯器的workflow,秒殺國phper的視頻。
研究php內核
php技術架構
最好能參與php開源項目
-------------------------------------------------------------linux
技術線(偏深度):
1. 基礎知識,好比數據結構,多線程,I/O,Http協議等
2. 語言深度,好比PHP的運行機制,性能優化,APC(以及其原理等)
3. 源碼閱讀,好比看過哪些框架,其中的機制是怎麼樣的,往細了問
4. 知識寬度,靜態語言,好比C、Java等,我始終以爲只會一門語言不是什麼好事情
1.看看簡歷,會問一些過去作的項目的用戶量、pv、吞吐量、相關難點和解決方法等
2.數據庫設計經驗,爲何進行分表? 分庫?
通常多少數據量開始分表? 分庫? 分庫分表的目的? 什麼是數據庫垂直拆分? 水平拆分? 分區等等?能夠舉例說明
3.數據庫優化有哪些? 分別須要注意什麼?
4.web開發方面會遇到哪些緩存? 分別如何優化?
5.給你256M的內存,對10G的文件進行排序(文件每行1個數字),如何實現?
對10G的文件進行查找如何實現?
統計10G文件每一個關鍵字出現的次數如何實現?
6.假如你如今是12306火車訂票的設計師,你該如何設計知足全國人民訂票?
7.假若有1億用戶的訪問量,你的服務器架構是怎樣的? 用戶信息的存儲方案如何設計?
8.若是你是技術組長,所帶團隊任務進度沒法完成你該如何解決?
若是在進度排滿的前提下插入任務,你該如何保證總進度不延期?
若是有的工程師今天預約任務沒有完成,你該如何解決?
9.從你的經驗方面談一下如何構建高性能web站點? 須要哪些環節? 步驟? 每一個步驟須要注意什麼如何優化等?
10. 爲何要對數據庫進行主從分離?
11. 如何處理多服務器共享session?
12. 一個10G的表,你用php程序統計某個字段出現的次數,思路是?
13. 會告訴你一個nginx日誌例子,用你認爲最佳的編程語言統計一下http響應時間超過1秒的前10個url?
14. 給你一個mysql配置文件,用你認爲最佳的編程語言解析該文件?
15. 給你兩個路徑a和b,寫一個算法或思路計算a和b差距幾層並顯示a和b的交集?
16. 給你一個url,在nginx配置一下rewrite指定到某個具體路徑?
17. 一個php文件的解釋過程是? 通常加速php有哪些? 提升php總體性能會用到哪些技術?
18. session和cookie生存週期區別? 存儲位置區別?
19. require、include、require_once、include_once區別? 加載區別? 若是程序按需加載某個php文件你如何實現?
20. chrome號稱爲多線程的,因此多線程和多進程的區別爲?
21. php在2011年末出現hash碰撞,hash碰撞原理爲? 如何進行修復?
22. web不安全因素有哪些? 分別如何防範?
23. 假如兩個單鏈表相交,寫一個最優算法計算交點位置,說思路也能夠?
24. 假如你是技術組長? 如何提升團隊效率?
25. nginx負載均衡有哪些? 若是其中一臺服務器掛掉,報警機制如何實現?
26. 不優化前提下,apache通常最大鏈接數爲? nginx通常最大鏈接數爲? mysql 每秒insert ? select ? update ? delete?
27. mysql 數據類型有哪些 ? 分別佔用多少存儲空間 ?
28. nginx設置緩存js、css、圖片等信息,緩存的實現原理是?
29. 如何提升緩存命中率? 如何對緩存進行顆粒化?
30. php的內存回收機制是?
31. 個人全部問題都問完了,你有什麼問題問我沒有?
-------------------------------------------------------------
php代碼調試:echo 和echo "<pre>"; print_r(method);
腳本js就是alert方式,或console.log。console.log 原先是 Firefox 的「專利」,嚴格說是安裝了 Firebugs 以後的 Firefox 所獨有的調試「絕招」。
這一招,IE8 學會了,不過用起來比 Firebugs 麻煩,只有在開啓調試窗口(F12)的時候,console.log 才能出結果,否則就報錯。
css調試就是弄成色塊加上邊框等。或者在頁面寫上css後,調通後再轉移到css文件。
日誌方式用於沒法打印時。php是解釋執行弱類型語言,不像java靜態強類型語言,能夠設置斷點一路執行跟蹤。php若是沒有日誌工具,就是黑盒難以排查bug。
請參考: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
1 內置API輸出調試1.1 基本調試API1.1.1 echo (print):1.1.2 printf1.1.3 print_r、var_dump(var_export)、debug_zval_dump1.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 Vim3.1.2 Zend Studio3.1.3 Eclipse3.1.4 NetBeans3.2 IDE調試3.2.1 Zend Studio + Zend Debugger3.2.2 Eclipse (PDT) + Xdebug3.2.3 Vim + Xdebug + DBGp4 PHP 性能調試技術4.1 基本時間佔用監測4.2 使用 Xdebug 進行性能分析4.2.1 安裝配置:4.3 APD(Advanced PHP Debugger)4.3.1 安裝配置4.3.2 使用APD4.4 使用Xhprof 進行性能分析4.4.1 Xhprof 的優勢:5 PHP單元測試技術5.1 PHPUnit