一名合格的PHP工程師的知識結構是怎樣的?

其實很多人特別是新手,很難一開始去了解一個php工程師的知識結構是怎麼樣子的,我看到知乎上面一些回答還不錯,做些整理備份:

作者:justin
鏈接:https://www.zhihu.com/question/19875503/answer/13251475
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

1.掌握語言本身的語法,熟悉常用類庫是必須的;
2.面向對象最爲當今的主流也是必須掌握的;
3.常用設計模式必須掌握,設計模式是前輩的總結、經驗;
4.php常與數據庫配合使用,而且首先爲mysql,所以mysql必須熟悉;
5.php是做爲一種web開發語言而流行的,所以瀏覽器中的javascript必須會,雖然現在很多公司有專業的javascript工程師,但是php程序員js也是必須掌握的;
6.html/css必須會,不要求你會切會div+css,但是至少要知道,因爲php是一種嵌入html中使用的語言(當然php也可以用於桌面等其他,但是和web(html)結合纔是它流行的原因);
7.linux不需要會,會的話肯定更好,一般公司都有專門服務器管理人員的。但是你要會在vi下進行編程,這時候就不像在ide下那麼好了,你應該儘量熟悉類庫。

其實以上的7點都很針對於web開發,需要掌握的知識,其實是和語言本身沒什麼關係的,應該說和做的項目有很大的關係,就假如要你用php寫一個web操作系統,這樣操作系統的設計思想你是要知道的吧。語言只是一個工具,大學4年的課程,也就是知識結構了,與語言沒什麼關係

作爲做了幾年php開發的程序員我說下個人的看法:

1 如果是程序員的話,不管你是ruby、python、java、.net、c、c++,還是php,你可能都需要學習這些語言的基本知識,這個語言的函數庫,或者是類庫,那是越熟悉越好
2 對於web應用開發的程序員,你肯定要熟悉數據庫和sql編程,那肯定是越熟悉越好,而且對於javascript和css也是如此,越熟悉越好
3 對於數據庫和服務器的配置,這不應該是你需要花很多精力的地方,因爲這是運維人員的工作,如果某個公司對這個有要求,那他們估計就沒有運維人員,這些東西很繁瑣,而且需要實踐,所以建議不要花太多的實踐在這上面,瞭解就可以
4 對於設計模式也是瞭解爲主,你可能會用到設計模式的地方很少,而且如果你真正對編程有感覺了,一段時間的實踐之後你自然知道怎麼用,哪些總是喜歡把設計模式、編程思想掛在嘴邊的基本都是沒畢業的
5 如果可以的話,我建議使用linux系統,學習Vim,並且學習apache,php,mysql的編譯,不過如果你堅持用linux系統的話,那你肯定會試着自己編譯這些東西的
6 多看php手冊,學好英文,有什麼問題首先看手冊
7 學習敏捷開發,學習使用PHPUnit、SimpleTest這些工具寫單元測試,並且在實際的項目中使用
8 如果要深入點的話,學習PHP擴展的開發,也許你可能不會開發擴展,但如果你瞭解瞭如果開發一個擴展,你就會知道PHP並不是想很多說的那麼簡單
9 學習並使用PHP的框架,如果你用了某個框架1-2年,那就試着去看下它的源代碼,並試着理解那些代碼,如果可以的話試着自己開發一個框架
10 所有程序語言都說用來解決具體的問題的,語言很重要,學好用好一門語言並不是一天兩天的事,不要相信哪些給你兜售編程思想的人,思想是在實踐中積累的,而不是看了書學了別人的思想就會了,然後就什麼都可以寫了
11 學習算法,鍛鍊思維
其實phper也是分前端和後端的,面向前端PHPer需要掌握的知識
  1. div+css這個不一定要去精通,但是要熟悉和掌握
  2. js這個也是要掌握的,尤其是jquery框架,目前很主流,一些頁面特效或者與PHP交互的ajax效果經常要使用到
  3. php這個語法基礎和類庫要熟練掌握,php手冊可以經常翻閱一下,php模板引擎,php框架都是需要。
  4. php對mysql的常見操作和優化也是必須的
面向後端的PHPer:
  1. lamp環境自己要會配置,一些websever配置要懂得,常用的linux命令和一些簡單的shell腳本要回寫
  2. 不僅要理解mysql的工作原理,一些基於mysql源碼級的優化也需要掌握了
  3. java或c的語言基礎可能也需要一些,php並不能解決所有問題,當phphold不住的時候可以考慮在websever上做一些必要模塊開發,或者利用os資源,例如GD類庫處理圖像性能並不一定很好,完全可以使用 ImageMagick來嘗試一下
  4. php源碼和mysql源碼都是有必須要研究的

一.Linux方面

Linux常用命令
1. 文件處理命令
2. 權限管理命令
3. 幫助命令
4. 文件搜索命令
5. 壓縮解壓命令
6. 命令使用技巧
7. 文本編輯器Vim
掌握Linux常見命令操作,學會Linux基本使用,熟悉Linux下文本編輯器。

Linux系統管理
1. 軟件包管理
2. 用戶和用戶組管理
3. 服務與進程管理
掌握Linux系統常見的系統管理操作。

Linux網絡應用
1. 基本網絡設置
2. 網絡文件共享
掌握Linux系統常見的網絡配置文件和命令,熟悉文件共享服務SSH、FTP。

LAMP環境編譯及Apache配置
1. LAMP環境編譯
2. Apache基本選項及應用案例
掌握源代碼包編譯構架LAMP環境,學會Apache的基本配置及典型互聯網應用配置。
================================================================
二.對象的程序設計

面象對象的介紹
1. 類和對象之間的關係
2. 面向對象的程序設計
面向對象是PHP5中的新加功能,也是PHP以後編寫代碼的方式,掌握面向對象在行業中的應用,並瞭解一些基本的面向對象的聲明語法。

如何抽象一個類
1. 類的聲明
2. 成員屬性
3. 成員方法

通過類實例化對象
1. 創建對象
2. 對象類型在內存中的分配
3. 對象中成員的訪問
4. 特殊的對象引用“$this”
5. 構造方法與析構方法
掌握對象在程序中的應用,在內存中的分配形式,還要對象中的成員訪問方式,並要掌握構造和析構以及關鍵字$this 使用。

封裝性
1. 設置私有成員
2. 私有成員的訪問
3. __set()、__get()、__isset()和__unset()
4. 四個方法
使用面向對象一定要使用他的三大特性,封裝就是其中之一,掌握封裝的意義以及封裝的應用和各種與封裝有關的魔術方法。

繼承性
1. 類繼承的應用
2. 訪問類型控制
3. 子類中重載父類的方法
繼承性也是面向對象的三大特性之一,需要掌握繼承的意義與應用,訪問控制和重載的方式。

常見的關鍵字和魔術方法
1. final關鍵字的應用
2. static和const關鍵字的使用
3. 克隆對象
4. 類中通用的方法__toString()
5. 通過__call()方法處理錯誤調用
6. 自動加載類
7. 對象串行化
在PHP的面向對象的程序設計中會用動一些常見的關鍵字和一些常用的魔術方法,需要全部掌握,並可以靈活運用。

抽象類與接口和多態
1. 抽象方法和抽象類
2. 接口技術
3. 多態性的應用
瞭解抽象類和接口的作用,並掌握他們的聲明與應用,重點掌握多態性的應用。

與類和對象有關的系統函數
1. 與類有關的系統函數
2. 與對象有關的系統函數
PHP中提供的類和對象有關的函數不多,但比較常用

常用功能類的編寫
1. 分頁類
2. 驗證碼類
3. 圖像處理類
4. 文件上傳類
5. 數據驗證類
通過這幾個類的編寫,不僅可以方便你在所有PHP項目中通用這些功能類,還可以對面向對象技術進行總結。
==============================================================
三.抽象層PDO

PDO所支持的數據庫
1. PDO的應用及所支持的數據庫
掌握PDO的應用原理和驅動設置,以及PDO的安裝方法,並可以以多種方式創建PDO對象,和麪要了解PDO對象中的成員。

創建PDO對象
1. 以多種方式調用構造方法
2. PDO對象中的成員方法

使用PDO對象
1. 調整PDO的行爲屬性
2. PDO處理PHP程序和數據庫之間的數據類型轉換
3. PDO的錯誤處理模式
4. 使用PDO執行SQL語句
需要掌握PHP中的各種屬性的應用、設置和讀取,以及PDO的錯誤處理模式,還需要了解通過PDO執行SQL語句。

PDO對預處理語句的支持
1. 瞭解PDOStatement對象
2. 準備語句
3. 綁定參數
4. 執行準備好的查詢
5. 獲取數據
PDO的預處理對象,可以完成PHP程序和數據庫之間的各種操作。需要掌握如果使用PDO準備預處理語句,和綁定參數、執行準備好的語句,獲取數據和大數據對象的存取,並可以使用PDO完成事務處理操作。

PDO的事務處理
PDO的事務處理方式
================================================================
四.腳本JavaScript

JavaScript語法
1. JavaScript應用概述
2. JavaScript腳本中變量與運算符
3. JavaScript流程控制和函數
4. JavaScript中數組和對象的創建及應用
可以完成JvavaScript的所有語法的學習,以及和HTML和CSS聯合使用,並可以編寫一些頁面中常見的腳本程序。

DOM編程
1. DOM及DHTML的應用介紹
2. 各種事件及事件處理程序的應用
3. 窗口window對象的屬性和方法
4. 文檔document對象的應用
5. 其location、body、form、screen等對象的使用

學會頁面中DOM的靈活應用、事件處理,還有各種DOM對象的屬性和方法,以及網頁中所有特效的編寫。
================================================================
五.Ajax

Ajax的應用
1. Ajax概述
2. Ajax定義
3. 使用Ajax創建Ajax的引擎
4. Ajax Web應用模式(異步)
5. AJAX 開發中的應用
6. 編寫和應用自定義的Ajax類
7. 使用Ajax完成XML的操作
8. 在Ajax應用Json技術
9. Ajax3.0的應用
要了解異步傳遞數據的方式,並掌握創建AJAX對象和應用AJAX對象中的屬性和方法。
==================================================================
六.Ajax與JQuery框架應用

JQuery的使用
1. JQuery的概述
2. JQuery的核心方法
3. JQuery的選擇器
4. JQuery的屬性
5. JQuery的篩選和文檔處理
6. JQuery的CSS應用
掌握在HTML文件中添加JQuery的應用,可以使用JQuery中的核心方法,以及常用選擇器的使用,和一些常用的JQuery方法。

JQuery的Ajax應用
1. JQuery的事件
2. JQuery的效果
3. 使用JQuery中的AjAX應用
Ajax是JQuery重點實現的技術,掌握JQuery中的幾種實現方法。
===============================================================
七.設計模式

MVC模式
1. MVC模式介紹
2. 視圖
3. 控制器
4. 模型
5. 模塊和操作
6. 主入口文件
7. MVC模式應用

需要掌握MVC的設計模式,包括視圖、控制器、模型的應用。其他的設計模式最好也要會使用。
============================================================
八.代碼規範

PHP編碼規範
數據庫規範設置
模板編寫規範

1. 適用範圍
2. 開發工具
3. PHP的文件格式
4. 註釋規範
5. 空行和空白
6. 字符串的使用
7. 命名原則
8. 語言結構
9. 數表表的設計
10. 索引設計原則
11. SQL語句的設計
12. 模板設計規範
=============================================================
九.版本控制

github和svn
==============================================================
十.框架
瞭解一些框架,比如Laravel,Yii,CodeIgniter,ThinkPHP之類的
1 http協議
2 緩存 與數據庫
3 php內存分配原理
4 scoket編程
5 服務器配置與服務器管理。
6 算法與數據結構
7 sql 性能分析與優化
8 系統容災、高負載設計
我按照重要性列舉一下:
1.設計思想:編程語言沒有好壞之分,重要的是你的思想 (小孩和成人手裏拿筆畫出的東西肯定不同,對畫出的畫解釋也不同)。思想的知識構成:
1> 數據結構、設計模式等( 其實每種數據結構和設計模式就是種設計思想 )
2>《java編程思想》,也可以對比一下yii、ci、zend框架各自的優點和缺點,吸取設計思想
3> 每種設計思想裏面操作的對象可能是一種數據結構、memcache的key、數據庫db/table/field、div、ip、idc等等
2.篩選工具:帶着思想去篩選工具。
1>你需要php提供一個函數去檢測單態模式,就需要自己學習c寫個擴展
2>你需要用php查詢數據庫就學習mysql和pdo相關
3>你需要在頁面調試php又覺得輸出出來的數據格式不好看,就去學習html+css+div
4>memcache、nginx、apache同理
  1. PHP語言
  2. HTTP協議
  3. HTML
  4. SQL(MySQL)
  5. 服務器(Apache/Nginx)
  6. 緩存(Redis,Memcache)
  7. 測試工具(ab,..

1)、對計算機的理論需要有基本的瞭解, 對數據結構知識要熟練掌握。理解各種數據結構的特徵,應用場景。能夠和具體的工作聯繫起來。

2)、熟練掌握PHP語法,熟悉常用類庫,對字符串庫、正則庫必須熟練掌握。

3)、理解、掌握常用設計模式,最好能研讀一些通用的框架源碼。

4)、對前端和後端知識都需要了解。掌握前端div+css+js,尤其是jquery框架。

5)、掌握php對mysql,memcache的常見操作和優化。

6)、熟悉常用的linux命令,能夠寫一些簡單的shell腳本。


來自:Avazu Holding劉冉冉

我們公司內部的,供參考:

PHP工程師知識體系結構

(2015-12-05)


知識結構:

1. PHP編程:變量、常量、字符串、數組、控制結構、數據庫、類、繼承、多態

2. MYSQL命令:INSERT、UPDATE、DELETE、SELECT、GROUP、COUNT、JOIN、索引

3. Linux命令:文件、權限、安裝LAMP、nginx、Vim文件編輯、壓縮解壓、搜索

4. MVC框架:CodeIgniter、控制器、模型、視圖、入口文件、類庫

5. 前端:HTML、CSS、JS、DOM(window/document)、JQuery(選擇器/方法)、Ajax、Json

6. 團隊協作:SVN、GITHUB、API開發

7. 併發性能:Memcache、集羣、資源服務器、AB併發測試與調優

8. WEB安全:SQL注入、驗證碼、刷新提交、漏洞掃描、DOS攻擊、跨域攻擊

9. 架構與部署:ECS、RDS、OCS、OSS、SLB


基礎篇:PHP編程、MYSQL命令、Linux、MVC(CodeIgniter)、前端、團隊協作

中級篇:併發性能、WEB安全

高級篇:架構設計、阿里雲部署

個人認爲一名合格的PHP應該具備以下知識:
1. 熟悉PHP語法,熟悉大多數常用PHP內置函數,可以不借助手冊寫出大部分程序。
2. 熟悉面向對象的分析設計方法。
3. 熟悉數據庫基本理論,熟悉SQL,熟悉MYSQL,可自行根據業務邏輯設計出高效的數據庫結構。
4. 熟悉Linux操作系統,可以自己配置Apache/Nginx、MYSQL、PHP。

在 WEB 開發世界裏,PHP 是最流行的語言之一,從 PHP 裏,你能夠很容易的找到你所需的腳本,遺憾的是,很少人會去用“最佳做法”去寫一個 PHP 程序。這裏,我們向大家介紹 PHP 的 10 種最佳實踐,當然,每一種都是經過大師們證明而得出的。

1. 在合適的時候使用 PHP – Rasmus Lerdorf

沒有誰比 PHP 的創建者 Rasmus Lerdorf 明白 PHP 用在什麼地方是更合理的,他於 1995 年發佈了 PHP 這門語言,從那時起,PHP 就像燎原之火,燒遍了整個開發陣營,改變了互聯網的世界。可是,Rasmus 並不是因此而創建 PHP 的。PHP 是爲了解決 WEB 開發者的實際問題而誕生的。

和許多開源項目一樣,PHP 變得流行,流行的動機並不能用正常的哲學來進行解釋,甚至流行得有些孤芳自賞。它完全可以作爲一個案例,一個解決各種 Web 問題的工具需求所引起的案例,因此當 PHP 剛出現的時候,這種工具需求全部聚焦到 PHP 的身上。

但是,你不能奢望 PHP 可以解決所有問題。Lerdorf 是第一個承認 PHP 只是一種工具的人,並且 PHP 也有很多力所不能及的情況。

根據工作的不同來選擇合適的工具。我跑了很多家公司,爲了說服他們部署和使用 PHP,但是這並不意味着 PHP 對所有問題都適用。它只是可以一個解決大部分問題的 front-end 腳步語言。

作爲一個 web 開發者,嘗試用 PHP 解決所有問題是不科學的,同時也會浪費你的時間。當PHP 玩不轉的時候,不要猶豫,試用一下其他的語言吧。

2. 使用多表存儲提高規模伸縮性– Matt Mullenweg

沒有人願意質疑 Matt Mullenweg 在 PHP 方面的權威性,他開發了這個星球上最流行的blog 系統,(依靠一個強大的社區力量支持): WordPress. 創建 Wordpress 以後,Matt 和他的團隊啓動了 WordPress.com 平臺,一個基於WordPress MU 的免費 blog 站點。現在,Wordpress.com 已經擁有大約 400 萬用戶,這些用戶每天提供超過 140,000 篇的日誌。

如果有人知道如何讓網站的規模伸縮自如,這個人一定是 Matt Mullenweg。2006 年的時候 Matt 對 Wordpress 的數據結構進行了前瞻性的改進,並且解釋了爲什麼 Wordpress MU 對每個 blog 使用獨立的 MYSQL 表格, 而不是把所有的 blog 數據都塞進一個巨大的表格。

我們測試過這個方法,但是發現如果要擴展它的伸縮性,代價太高。如果用一個整體的數據結構,在大流量面前,你將會面臨服務器硬件的問題。在 MU 裏面。用戶們都被分佈到獨立的表格當中,並且可以輕易地組織起來。舉個例子,WordPress.com 把用戶的數據分散存儲到 4096個數據庫中,這些數據庫可以分散大規模的數據訪問,實現流量和壓力分流。

數據表的可遷移性讓代碼(blog)可以運行得更快,並且讓系統具備更強的伸縮性。依靠強大的緩存策略和靈活的數據庫運用策略, Matt 向人們展示了時下最流行的 Facebook 和 Wordpress.com 都可以在 PHP 下穩定運行,並且處理驚人的訪問量。

3. 千萬不要相信用戶 – Dave Child

Dave Child 是 Added Bytes (previously ilovejackdaniels.com) 網站的核心人物,這個網站以他出色的《cheat sheets for many programming languages》而聞名。 Dave 爲很多英國的公司服務,並且已經在編程世界裏樹立起相當的權威。

Dave 爲 PHP 開發者提供了很多深謀遠慮的建議,並總結成了《writingsecure code in PHP》:千萬不要相信你的用戶,他們甚至可能會傷害你。

有一條 web 開發的基本原則,我重複多少遍都覺得不夠,那就是:千萬不要相信你的用戶,同時要假設你網站中的每個數據單元都是從用戶那裏收集來的惡意代碼。很多時候,你必須用 JAVAscript 在客戶端檢驗表單提交過來的內容, 如果你習慣瞭如此,那麼,這是一個好習慣。如果安全性對你來說很重要,這就是最重要最需要學習的原則。

Dave 目前正致力於爲它的《Writing Secure PHP》系列書籍整理實例,書的最後他說:

最後,變得偏執一點吧。除非你認爲你的站點永遠不會受到攻擊,否則就正視所有的問題,當問題真正發生的時候,你的情況會變得很糟。你需要把每個用戶都看成會帶來一場攻防站的黑客,想盡一切辦法來保護站點的安全,同時想好相應問題的解決方案。

4. 多使用 PHP 緩存 – Ben Balbo

Ben Balbo 開發了 Site Point,一個爲 developers 和 designers 提供指導的網站。他是墨爾本PHP 開發和開源俱樂部的成員, 因此他對 PHP 有一定的瞭解,同時對 PHP caching 有一定的想法和經驗。

如果你擁有一個訪問量很大,但更新並不頻繁的站點(比如 blog,基於某種 CMS),或許它需要進行一些改造,這些改造不會花費太多的時間,但是對性能有突出的貢獻。如果要爲一個複雜/更新頻率很快的站點建立緩存機制,過程可能會很曲折,但是好處也是顯而易見的。

PHP 緩存技術有很多種,Ben 爲我們推薦瞭如下一些:

緩存函數的運行結果

設置過期時間

緩存 IE 下載的文件

模板緩存技術

Cache_Lite

由於 PHP 作爲動態語言的特性,緩存機制對於更新頻率並不快的站點來說非常重要。

5. 使用 IDE, Templates 和 Snippets 加速 PHP 開發 – Chad Kieffer

當 Chad Kieffer 從 UI 設計和數據庫優化的工作中抽身出來的時候,他會在他的博客 2 tablespoons 上分享很多技術經驗。由於Chad 多方面的全面發展,他經常可以發現其他程序員不能發現的問題,並形成相關經驗,尤其是他開發網站的方法。他參與了網站開發的各個環節,因此他的建議對於提高網站開發的大局觀非常有用。

Chad 認爲使用 Eclipse PDT (Eclipse’s PHPdevelopment package) 這樣的 IDE,同時使用一些模板技術和開源項目可以有效地提高 PHP 的開發速度。

緊湊的計劃,長長的 to do lists 以及 deadlines 讓開發人員非常苦悶。不過有些功能,比如 Eclipse Templates,可以有效減少編碼的時間和出錯的機率。

通常來說,任何項目都可以自動化,自動化程度越高, 你完成項目的時間就越短。花時間來開發使用頻率很高的框架和模板,將會節省你以後更多時間。同時,使用像 Eclipse and the PDT package 這樣的 IDE,你會發現效率得到明顯提高,IDE 可以自動閉合,補全分號並且可以在本地 debug。

6. 利用好 PHP 的過濾函數 – Joey Sochacki

或許 Joey Sochacki 並不像 Matt Mullenweg 那樣有名 ,但他也是一個經驗豐富的開發者,並且通過他的博客 Devolio 分享了很多技術經驗

Joey 發現在編寫 php 代碼的過程中有很多地方需要進行過濾,但卻並沒有太多的 coder 關注 php 的內置過濾函數。

過濾數據是我們經常需要做的事情,但是很多功能豐富的 PHP 內置過濾函數卻不爲人知。使用類似filter_* 的 PHP 內置函數,我們幾乎可以處理所有的過濾任務,包括數據類型驗證/URL/email 和 IP 地址驗證/特殊字符處理等等。

過濾是一件複雜的事情,但是我相信 joey 的發現會給你很多啓發,讓你認識到 PHP 強大的過濾功能。

7. 使用 PHP 框架 – Josh Sharp

對於是否應該使用 Zend, CakePHP,Code Igniter, 或者其他 PHP 框架,一直存在着很多爭議,但是在 web 開發者的心中,他們有自己衡量的標準。

Josh Sharp 自己創建了一家提供麪包和黃油服務的網站,因此他對於使用 PHP 框架來開發網站有一定的經驗。他認爲使用一個PHP 框架來進行項目開發(use a PHPframework ),可以有效地節省時間,並且減少出錯的機率。爲什麼?因爲他覺得 PHP 實在是太好上手了。

PHP 的易於使用有時候也有缺陷,因爲並不嚴格的語法,經常會導致很多錯誤代碼的誕生。但如果使用一個 PHP 框架,出錯的機率就會大大減少。

PHP 框架可以讓你的代碼結構更加規範,並且節省大量時間。

8. 不要使用 PHP 框架 – Rasmus Lerdorf

與 Josh 的觀點恰恰相反,PHP 的鼻祖 Rasmus Lerdorf 卻認爲最好不要使用 PHP 框架,爲什麼?因爲不基於框架的 PHP 性能更好。Rasmus 在 Drupalcon 2008的演講上,用“Hello World”的例子來對比了一些框架 PHP 和簡單 PHP 之間的性能,結果顯示框架 PHP 的性能要遠遠落後。

9. 使用批處理 – Jack D. Herrington

Jack Herrington 對 PHP 世界並不陌生, 並且爲大名鼎鼎的 IBM developerWorks 貢獻過超過 30 篇的專搞,同時出版過《PHP Hacks》的書,因此他是一個真正的專家。

Herrington 推薦使用批處理和 Cron 來代替那些可以運行在後臺的程序腳步,Web 用戶並不願意在線等待你的處理過程,所以有些事情更適合放到後臺來處理。

誠然,在某些情況下,這有點大材小用了,但是你可以清楚地看到,使用 Cron, MySQL, PHP 面向對象的方法以及Pear::DB 這些便捷的工具來創建一個批處理工具並不是一件複雜的事情。

Jack 認爲使用 cron, PHP 和 MySQL 在後臺處理一些任務,比起多進程的業務邏輯要划算得多。

兩種方法我都嘗試過,我認爲 Cron 非常符合”Keep It Simple, Stupid” (KISS) 的原則,它讓後臺處理變得簡單。與多進程的業務邏輯相比,它沒有內存溢出的風險。你可以創建一個簡單的批處理腳本,並且在 cron 中運行,這個腳本會定時檢查是否有任務需要處理,處理完之後就會自動退出,因此你不用擔心是否有進程卡殼,或者陷入死循環。

10. 及時啓用錯誤報告 – David Cummings

David Cummings 有一個專門提供 CMS 軟件服務的公司 ,並且獲得過幾次獎 ,他有非常豐富的 PHP 開發經驗。David 曾經寫過《two PHP tips he wished he’d learned in the beginning》,其中一點就是:及時啓用錯誤報告,這會節省大量的時間。

我告訴人們,最重要的事情就是最大程度地開啓PHP 的錯誤報告,爲什麼?因爲 PHP 可能會隱藏很多小問題:

變量沒有預定義

在代碼片段中引用了不可用的變量

使用了未定義的常量這些因素看起來並不是什麼大事,除非你在使用面向對象的方法編寫一些類庫。通常,關閉錯誤報告將可能使你付出更大的成本來維護你的代碼。

錯誤報告可以幫你輕易地找到代碼的問題所在,如果錯誤報告的等級夠高,細微的錯誤都能被立即發現,幫助你節省整體 debug 的時間。


熟悉語法之類的就不說了,那是基本。好的PHPer我認爲應有如下特徵:
1.瞭解HTTP協議和瀏覽器的運行機制。
2.優雅的代碼風格,運用常見設計模式。
3.高訪問量數據庫設計,高併發需求優化方案。
4.瞭解PHP底層運行機制,能夠編寫簡單PECL擴展。
5.至少掌握Linux的基本操作和主流Webserver搭建。

首先能自己搭建環境
Linux(Ubuntu/ArchLinux/CentOS), Apache/Nginx, MariaDB/MySQL, Redis/Memcached, MongoDB, PHP-FPM
所以寫php的, 連linux都不會, 還是好好加油吧.

前端
除了基本的Html, css, js
接着是框架bootstrap或者foundation
之後是sass
再是grunt/gulp/npm script
再然後是es5, es6/es2015, 感覺最近幾年, js在發神經, 既然已經說到了es2015, 像webpack, Tree-shaking, nodejs... 這些東東有興趣的自己google百度
至於 jquery, 是個好工具, 但已經是老古董了.

前後端可以分離, 但把開發人員也分前後端, 我是覺得沒這個必要了.
前後端只是各有側重, 寫個php不會前端, 還是好好加油吧.

數據庫
寫php的, 覺得寫些簡單的SQL語句, 如select, update, delete, insert, 是一件非常吃力的事, 那還是好好加油吧.

PHP
關於php要掌握的知識點, 前面的回答有很多. 這裏主要要說的是學習的步驟, 就四步
1. 看官網, (最好看英文, 翻譯都是二手貨), 不用看全, 但要有整體概念, 用的時候能找到相應的資料
2. 代碼規範, 極其重要, 好像竟然沒人提, 推薦的規範是 psr-2 (PSR-2:Â Coding Style Guide)
3. 掌握一個框架, 建議laravel, symfony
4. 用Google(不是百度), 以下知識點是一些開胃菜, (作爲一個合格php開發, 不會用Google, 還是好好加油吧)
- composer
- PHP-FIG — PHP Framework Interop Group 真心是個好東西啊
- GitHub - squizlabs/PHP_CodeSniffer: PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.
- PHPMD - PHP Mess Detector
- PHPUnit – The PHP Testing Framework
- PHP: The Right Way

Git
不廢話了, 不會用的還是好好加油吧.

到這裏只是剛開始!

如果想做個普通程序員 你大學課程加上大家說的各方面技能 就足夠了 你的思考圈子會被上級指定

如果你想出類拔萃 需要:
大局觀
好習慣:多思考 少敲鍵盤 多計劃 少debug 多溝通 少修改
儘量從一個項目學很多 不要從很多項目各學一點
多留心:花時間分析你看到的各個項目 增加技術儲備 一旦有機會 馬上抓住
重點學習:只學用得到的 不要迷戀於技術
社交:緊跟上級 好好表現 他走了也會帶你走;和大家搞好關係 有問題找他們幫忙。
鍛鍊身體
享受生活
服務器:Linux(最好能搭環境,不管是一鍵安裝包或者編譯安裝,熟悉基本的Linux操作,能寫Shell最好了); PHP(這個當然要很熟悉的,包括面向對象,因爲現在的框架幾乎都是面向對象了,類庫,安全模式等); Apache(不要求會寫擴展模塊,一般的使用和配置參數要熟練掌握,比如僞靜態); Mysql(能根據性能要求,配置調優,寫高效語句優化數據庫,最好會寫存儲過程); DIV+CSS(不要求達到美工級別的切圖,看得懂會改就行,會用Debug準確定位排錯); JS(這個一定得會,可以不熟,但是一定要能通過查詢手冊解決,會用Jquery等庫); HTTP(HTTP協議要有所理解,會抓包,會分析請求)還有Ajax,xml等技術
<img data-rawheight="278" data-rawwidth="656" src="https://pic1.zhimg.com/bfc42fe9e713343497f9156ba7f9a730_b.jpg" class="origin_image zh-lightbox-thumb" width="656" data-original="https://pic1.zhimg.com/bfc42fe9e713343497f9156ba7f9a730_r.jpg">來源:來源:【分享】給php初學者的建議和學習路線
合格的php需要了解的東西還挺多, 比如mysql、nosql、linux、nginx、前端技術等等,最主要的還是要精通,有很多phper說精通xx,充其量僅僅是瞭解的程度。
補充一句:要了解PHP擅長做什麼,Java體系中的JSP/Servlet/SSH一樣可以做這個事情,在什麼情況下用PHP,什麼情況下不能用,需要對他們有比較深入的瞭解才能做出判斷。
別忘記,PHP 畢竟是解釋型的腳本語言。

發佈了36 篇原創文章 · 獲贊 19 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章