記得以前在某個論壇上看到別人說php程序員土,做爲一名php程序員心裏固然是不樂意的。不過別人這麼說也不是徹底沒有道理,其實他說php程序員土應該指的就是php程序員不懂得與時俱進。php
固然,這也不全是咱們php程序員自己的鍋。相信咱們的隊伍中至少也有三分之一的人員來自各大培訓機構吧?在網上隨便搜下各大培訓機構的視頻教程或者文字教程,講的東西都仍是幾年前的東西。好比鏈接mysql的一水是用mysql擴展,可是這個擴展在php 5.5中就被標記爲deprecated了,而且在php 7.0版本被徹底移除。還有一個深有感觸的就是在各類php羣中,會有人貼出一段拼接的sql,而後問別人本身哪裏寫錯了,爲何查不出來數據?讓我來講,這些都屬於典型的過期培訓課程受害者。另外還有一些就是問如今從頭作一個網站,選用哪一個php版本?而後當別人推薦php7或者7.1的時候,他會固然的說php7和php7.1太新了,不穩定,問下用php 5.4怎麼樣? wtf……mysql
因此你看,按照上面這些實例來講,別人說咱們php程序員土是否是也有點道理?若是有的話,那咱們要怎麼改變現狀,變得modern起來呢?我以爲能夠從如下幾個方面着手。nginx
首先,要多關注語言層面的發展。好比php7早在15年末就已經released了,並且官方作了大量的測試工做,不管是功能上仍是性能上的。php開發團隊對php的向向前兼容作了很好的處理,除了移除了一些早已經deprecated的類和接口,其餘行爲幾乎沒有改動。而且被移出的這些類庫和接口還有專門的文檔:http://php.net/manual/en/migration70.php來講明,只要稍費點心,在本身項目中作些檢索就能知道會不會影響已有功能。就算線上項目不敢輕易作版本遷移,新開發的項目總也沒有理由去用過期的php5了吧?對於這總不作任何調查,穩定性全靠感受的開發者,鳥哥不知道會不會氣到吐血。再說擴展,用的最多的兩種:圖片處理和數據庫訪問。圖片處理儘可能用Imagick去替代GD,前者不管是功能仍是處理速度或者是圖片處理的質量都遠勝於後者;數據庫訪問務必用PDO或mysqli去替代mysql擴展,前者(PDO)提供一套針對多種流行數據庫的統一接口,讓你無痛把程序部署在不一樣的數據庫服務上,同時提供的預處理和參數綁定特性,能確保不會發生sql注入,你實在是沒有冒着風險去拼sql了。laravel
其次,做爲一名與時俱進的程序員還要關注社區的動向。好比關注和實踐下近兩年比較火的laravel框架,號稱爲藝術家設計的框架,深刻進去你會發現這個框架不只用起來優雅,設計和實現的也很優雅;試下可讓php異步方式執行的swoole擴展和框架,按照做者本身的評測,性能比nginx還高(笑);還有workerman這種php socket服務框架,除了http協議外,還支持websocket,同時傳輸層的udp和tcp協議也都支持;嘗試着在本身的項目中使用composer來管理依賴,省去了include來require去;在本身的項目和開發團隊中踐行社區推薦編碼規範psr,搭配phpcs,約束團隊內編碼風格更統一;使用RESTFul架構模式來開始本身的下一個項目;還能夠蹭個熱點,去嘗試下機器學習,能夠預想在不遠的未來會有不少相關職位和需求,這方面雖然不是php的強項,不過仍是有相似php-ml這種優秀的機器學習庫供你學習和研究。其實只要保持着對技術的熱情,我以爲這些都不是很難作到的事情。作技術很重要的一點就是跟着大公司走和跟着社區走,還有一點就是記得github是你永遠的好朋友,時不時的上去瞄兩眼,相信偶爾會有驚喜發現。git
而後,就是工具的運用了。這裏的工具很普遍,從開發工具到調試工具,再到代碼管理等。先說開發工具,在我實習的時候,組長讓我用editplus去寫代碼,理由是沒有太多代碼提示,方便記住更多的函數。當時深覺得然,後來隨着學習的深刻和知識面的擴展,才發現這是邪道。php有一個飽受你們詬病的問題就是混亂的函數名和參數設計,你想記住每一個函數名和參數列表幾乎是不可能的,我也奉勸各位想要靠背住函數名提高開發水平的仍是考慮換條路。因此各位仍是儘可能使用phpstorm這種all in one的IDE或者vscode這種擴展性很強的編輯器。再說到調試工具,我注意到周圍同事大部分時候調試還都是var_dump而後exit,不少時候這是沒問題的。不過仍是有必要了解一下xdebug的使用,採用單步調試能更方便的掌握任何階段內存中變量的狀態;還有相似kint和debugbar這種調試輔助工具,能大大提升你的調試效率。除了這種本地化的工具外,還有一些很cool的服務你值得關注。好比實時錯誤報告服務,sentry,可以讓你很簡單的分析本身的服務哪裏出了問題,幫助你快速定位並解決問題;再好比性能監控服務new relic或者blackfire,經過簡單的部署,就能分析出來本身線上服務的瓶頸所在,從而提高服務質量。代碼管理的話如今應該沒有理由不採git了,不管是更輕量的分支、本地版本庫仍是更多樣化的協做方式,都是你值得擁有的緣由! 固然了,還有不少更有趣和強大的工具在誕生,咱們須要作的就是關注社區,保持進取。程序員
最後,雖然咱們在寫php,可是眼光不該侷限於語言自己。咱們還須要瞭解諸如容器技術,像是docker、lxc,而且在生產和開發環境中嘗試使用這些技術提升咱們的環境搭建和服務部署效率。再好比持續集成,在敏捷開發的團隊中必定對這個概念不會陌生,持續集成的主要意義在於快速發現錯誤和防止多人開發環境下分支大幅度偏離主幹,比較出名的持續集成服務好比jenkins、travis或者是用php開發的PHPCI,若是你還沒試過,能夠挑選一個在本身的團隊中嘗試,附上一個總結的腦圖給你們github
因此,最關鍵的一點就是要時刻關注社區動向,保持對技術的熱情和一顆折騰的心!若是以爲所講的東西可以幫助到你,而且但願進行更詳細的深刻的學習,歡迎加羣632109190進行討論和學習。web