PHP、Java、Python、C、C++ 這幾種編程語言都各有什么特點或優點?
php
java
python
C
C++
php
眾所周知,PHP語言作為服務器端開發的腳本語言,在網站開發方面非常有名。自從1995年RasmusLerdorf創建之后,根據W3Techs的調查顯示在已知的服務端編程語言中,PHP就占據了82%。而其中還不乏WordPress,Facebook這樣的知名科技公司。
2015年PHP7發布,更是極大地改進了性能,讓PHP變得更加強大。不過,像所有的技術一樣,人們對它的評價總是參差不齊,有人喜歡而有人不喜歡。今天,達內PHP專家(http://PHP.tedu.cn)跟大家一起分析PHP語言的優缺點。
優點一:流行,容易上手
PHP是目前最流行的編程語言,這毋庸置疑。它驅動全球超過2億多個網站,有全球超過81.7%的公共網站在服務器端采用PHP。不僅如此,據統計,有78.1%從事PHP的人認為PHP最容易學習和上手。這是因為PHP常用的數據結構都內置了,使用起來方便簡單,也一點都不復雜,表達能力相當靈活。
NewMediaCampaigns公司的開發工程師JoshLockhart曾講過:PHP是最容易學習的網站開發語言,它能安裝在絕大多數的服務器上,並且由於有實時更新的文檔和問答,PHP語言相對其他語言簡單易學。
優點二:開發職位很多
在服務器端的網站編程中PHP會更容易幫助你找到工作。京東、淘寶、天貓、Google、百度、新浪、騰訊QQ、微信等很多互聯網相關企業都在使用PHP開發框架,所以可以說市場對PHP的開發程序員的需求還是比較大的。通過各個招聘網站搜索PHP工程師,得出的數字讓我們兩眼放光,智聯招聘PHP的招聘崗位高達43081個;前程無憂的招聘崗位人數達46008;獵聘網的相關數據為6013個,可見PHP的需求多,職位也多.
優點三:仍然在不斷發展
PHP在不斷兼容着類似closures和命名空間等技術,同時兼顧性能和當下流行的框架。版本是7之后,一直在提供更高性能的應用,在一些WordPress基准測試當中,性能可以達到PHP 5.6的3倍。PHP 7包含了一些重大安全改進,如除去PHP安全模式,添加魔術引號,有一些新的保留關鍵字等等。而今年三月份,PHP 7.1.3和7.0.17已經正式發布。
缺點:設計缺陷,缺少關注
PHP被稱作是不透明的語言,因為沒有堆棧追蹤,各種脆弱的輸入。沒有一個明確的設計哲學。早期的PHP受到Perl的影響,帶有out參數的標准庫又是有C語言引入,面向對象的部分又是從C++和Java學來的。
不過,總的來說,相對於極小的缺點來說,PHP的發展空間是極其大的,這也是為何其會受到市場以及企業喜歡和歡迎的原因所在。可以說,對一門技術的喜厭程度來自很多方面,從個人習慣到項目需求,畢竟任何東西都沒辦法做到人見人愛。
java
Java語言有下面一些特點:簡單、面向對象、分布式、解釋執行、魯棒、安全、體系結構中立、可移植、高性能、多線程以及動態性。
1. 面向對象
Java語言的設計集中於對象及其接口 ,它提供了簡單的類機制以及動態的接口模型。對象中封裝了它的狀態變量以及相應的方法 ,實現了模塊化和信息隱藏 ;而類則提供了一類對象的原型 ,並且通過繼承機制 ,子類可以使用父類所提供的方法 ,實現了代碼的復用。
2. 分布性
Java是面向網絡的語言。通過它提供的類庫可以處理 TCP/IP協議 ,用戶 可以通過 URL地址在網絡上很方便地訪問其它對象。
3. 簡單性
Java語言是一種面向對象的語言 ,它通過提供最基本的方法來完成指定的任務 ,只需理解一些基本的概念 ,就可以用它編寫出適合於各種情況的應用程序。 Java略去了運算符重載、多重繼承等模糊的概念 ,並且通過實現自動垃圾收集大大簡化了程序設計者的內存管理工作。另外 ,Java也適合於在小型機上運行 ,它的基本解釋器及類的支持只有 40KB左右 ,加上標准類庫和線程的支持也只有 215KB左右。庫和線程的支持也只有 215KB左右。
4. 魯棒性
Java在編譯和運行程序時 ,都要對可能出現的問題進行檢查 ,以消除錯誤的產生。它提供自動垃圾收集來進行內存管理 ,防止程序員在管理內存時容易產生的錯誤。通過集成的面向對象的例外處理機制 ,在編譯時,Java提示出可能出現但未被處理的例外 ,幫助程序員正確地進行選擇以防止系統的崩潰。另外,Java在編譯時還可捕獲類型聲明中的許多常見錯誤 ,防止動態運行時不匹配問題的出現。
5. 可移植性
與平台無關的特性使 Java程序可以方便地被移植到網絡上的不同機器。同時 ,Java的類庫中也實現了與不同平台的接口 ,使這些類庫可以移植。另外,Java編譯器是由 Java語言實現的 ,Java運行時系統由標准 C實現 ,這使得Java系統本身也具有可移植性。
6. 體系結構中立
Java解釋器生成與體系結構無關的字節碼指令 ,只要安裝了 Java運行時系統 ,Java程序就可在任意的處理器上運行。這些字節碼指令對應於 Java虛擬機中的表示 ,Java解釋器得到字節碼后 ,對它進行轉換 ,使之能夠在不同的平台運行。
7. 安全性
用於網絡、分布環境下的 Java必須要防止病毒的入侵。 Java不支持指針,一切對內存的訪問都必須通過對象的實例變量來實現 ,這樣就防止程序員使用"特洛伊 "木馬等欺騙手段訪問對象的私有成員 ,同時也避免了指針操作中容易產生的錯誤。
8. 解釋執行
Java解釋器直接對 Java字節碼進行解釋執行。字節碼本身攜帶了許多編譯時信息 ,使得連接過程更加簡單。
9. 動態性
Java的設計使它適合於一個不斷發展的環境。在類庫中可以自由地加入新的方法和實例變量而不會影響用戶程序的執行。並且 Java通過接口來支持多重繼承 ,使之比嚴格的類繼承具有更靈活的方式和擴展性。
10. 多線程
多線程機制使應用程序能夠並行執行 ,而且同步機制保證了對共享數據的正確操作。通過使用多線程 ,程序設計者可以分別用不同的線程完成特定的行為 ,而不需要采用全局的事件循環機制 ,這樣就很容易地實現網絡上的實時交互行為。
11. 高性能
和其它解釋執行的語言如 BASIC、 TCL不同 ,Java字節碼的設計使之能很容易地直接轉換成對應於特定CPU的機器碼 ,從而得到較高的性能。
python
盡管Python 已經流行了超過15 年,但是一些人仍舊認為相對於通用軟件開發產業而言, 它還是個新丁。我們應當謹慎地使用“相對”這個詞,因為“網絡時代”的程序開發,幾年看 上去就像幾十年。
當人們詢問“什么是Python”的時候,很難用任何一個具象來描述它。人們更傾向於 一口氣不加思索地說出他們對Python 的所有感覺,這些特點究竟 又是什么呢?為了讓你能知其所以然,我們下面會對這些特點進行逐一地闡釋。
簡單
Python是一門簡單而文字簡約的語言。閱讀好的Python程序感覺就像閱讀英語,盡管是非常嚴格的英語。Python的這種偽代碼特性是其最大強項之一,它可讓你專注於解決問題的辦法而不是語言本身。
容易學習
正如你即將看到的,Python非常容易上手。就像剛剛提到的,Python具有格外簡單的語法。
免費開源
Python是一個FLOSS(自由/自由與開源軟件)的例子。在一些簡單的條款之下,你可以自由地分發這個軟件的拷貝,閱讀其源代碼,修改它,或者將其一部分用到新的自由程序中。FLOSS是基於共享知識社區的概念,這是Python如此好的原因之一——它是由那些希望看到更好的Python的社區創建和不斷改進的。
高級語言
當你使用Python編寫程序時,你永遠不需要擔心低級細節,比如你的程序管理內存的使用等。
可移植
基於其開放源代碼的特性,Python已經被移植(也就是使其工作)到許多平台。只要你足夠小心,避免使用系統相關特性,你的所有Python程序都可以不加修改地運行在這其中任意平台。
你可以在Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acorn RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE,甚至PocketPC平台上使用Python。
你甚至可以使用類似Kivy平台為iOS(iPhone、iPad)和Android創建游戲。
解釋型
這需要一些解釋。
使用編譯型語言(像C或者C++)編寫的程序,會由編譯器使用一系列標志和選項,將源代碼(如C或者C++)轉換成一種電腦能夠識別的語言(二進制代碼,也就是0和1)。在運行程序時,鏈接器/載入軟件將程序從硬盤復制到內存,然后開始運行。
換句話說,Python不需要編譯成二進制代碼。你只需從源代碼直接運行程序。在內部,Python將源代碼轉換成一種稱為字節碼的中間格式,然后將其翻譯你的計算機的機器語言,然后開始運行。事實上,這一切都讓Python的使用更為簡單,因為你不必擔心程序的編譯、保證恰當的庫被鏈接和載入等等。這也使得你的Python程序更易於移植,因為你只需要復制你的Python程序到另外一台計算機,然后它就可以工作了!
面向對象
Python同時支持面向過程和面向對象編程。在面向過程語言中,程序圍繞着過程或者函數(只不過是可重復使用的程序片段)構建。在面向對象語言中,程序圍繞着對象(數據和功能的組合)構建。Python具有非常強大但是過於簡潔的執行面向對象編程的方式,特別是相對於C++或者Java這種大型語言來說。
可擴展
如果你需要一段運行很快的關鍵代碼,或者是想要編寫一些不願開放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調用。
可嵌入
你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得“腳本化”的能力。
擴展庫
Python標准庫的確很大。它能夠幫助你完成許多工作,包括正則表達式、文檔生成、單元測試、線程、數據庫、網頁瀏覽器、CGI(公共網關接口)、FTP(文件傳輸協議)、電子郵件、XML(可擴展標記語言)、XML-RPC(遠程方法調用)、HTML(超文本標記語言)、WAV(音頻格式)文件、加密、GUI(圖形用戶界面)以及其它系統相關的代碼。記住,只要安裝了Python,所有這些都能做到。這叫做Python的“遙控器”哲學。
除了標准庫,還有各式各樣的其它高質量庫,你可以在Python包索引找到它們。
小結
Python的確是一個激動人心的功能強大的語言。Python那種性能和特性的恰到好處的組合讓使用Python編程既有趣又簡單。
C
1) 語言簡潔,使用方便靈活
C語言是現有程序設計語言中規模最小的語言之一,而小的語言體系往往能設計出較好的程序。C語言的關鍵字很少,ANSI C標准一共只有32個關鍵字,9種控制語句,壓縮了一切不必要的成份。C語言的書寫形式比較自由,表達方法簡潔,使用一些簡單的方法就可以構造出相當復雜的數據類型和程序結構。
2) 可移植性好
用過匯編語言的讀者都知道,即使是功能完全相同的一種程序,對於不同的單片機,必須采用不同的匯編語言來編寫。這是因為匯編語言完全依賴於單片機硬件。而現代社會中新器件的更新換代速度非常快,也許我們每年都要跟新的單片機打交道。如果每接觸一種新的單片機就要學習一次新的匯編語言,那么也許我們將一事無成,因為每學一種新的匯編語言,少則幾月,多則上年,那么我們還有多少時間真正用於產品開發呢?
C語言是通過編譯來得到可執行代碼的,統計資料表明,不同機器上的C語言編譯程序80%的代碼是公共的,C語言的編譯程序便於移植,從而使在一種單片機上使用的C語言程序,可以不加修改或稍加修改即可方便地移植到另一種結構類型的單片機上去。這大大增強了我們使用各種單片機進行產品開發的能力。
3) 表達能力強
C語言具有豐富的數據結構類型,可以根據需要采用整型、實型、字符型、數組類型、指針類型、結構類型、聯合類型、枚舉類型等多種數據類型來實現各種復雜數據結構的運算。C語言還具有多種運算符,靈活使用各種運算符可以實現其他高級語言難以實現的運算。
4) 表達方式靈活
利用C語言提供的多種運算符,可以組成各種表達式,還可采用多種方法來獲得表達式的值,從而使用戶在程序設計中具有更大的靈活性。C語言的語法規則不太嚴格,程序設計的自由度比較大,程序的書寫格式自由靈活。程序主要用小寫字母來編寫,而小寫字母是比較容易閱讀的,這些充分體現了C語言靈活、方便和實用的特點。
5) 可進行結構化程序設計
C語言是以函數作為程序設計的基本單位的,C語言程序中的函數相當於匯編語言中的子程序。C語言對於輸入和輸出的處理也是通過函數調用來實現的。各種C語言編譯器都會提供一個函數庫,其中包含有許多標准函數,如各種數學函數、標准輸入輸出函數等。此外C語言還具有自定義函數的功能,用戶可以根據自己的需要編制滿足某種特殊需要的自定義函數。實際上C語言程序就是由許多個函數組成的,一個函數即相當於一個程序模塊,因此C語言可以很容易地進行結構化程序設計。
6) 可以直接操作計算機硬件
C語言具有直接訪問單片機物理地址的能力,可以直接訪問片內或片外存儲器,還可以進行各種位操作。
7) 生成的目標代碼質量高
眾所周知,匯編語言程序目標代碼的效率是最高的,這就是為什么匯編語言仍是編寫計算機系統軟件的重要工具的原因。但是統計表明,對於同一個問題,用C語言編寫的程序生成代碼的效率僅比用匯編語言編寫的程序低10%~20%。
盡管C語言具有很多的優點,但和其他任何一種程序設計語言一樣也有其自身的缺點,如不能自動檢查數組的邊界,各種運算符的優先級別太多,某些運算符具有多種用途等。但總的來說,C語言的優點遠遠超過了它的缺點。經驗表明,程序設計人員一旦學會使用C語言之后,就會對它愛不釋手,尤其是單片機應用系統的程序設計人員更是如此。
C++
C++語言既保留了C語言的有效性、靈活性、便於移植等全部精華和特點,又添加了面向對象編程的支持,具有強大的編程功能,可方便地構造出模擬現實問題的實體和操作;編寫出的程序具有結構清晰、易於擴充等優良特性,適合於各種應用軟件、系統軟件的程序設計。用C++編寫的程序可讀性好,生成的代碼質量高,運行效率僅比匯編語言慢10%~20%。
C++語言具有以下特點:
C++是C語言的超集。它既保持了C語言的簡潔、高效和接近匯編語言等特點,又克服了C語言的缺點,其編譯系統能檢查更多的語法錯誤,因此,C++比C語言更安全。
C++保持了與C語言的兼容。絕大多數C語言程序可以不經修改直接在C++環境中運行,用C語言編寫的眾多庫函數可以用於C++程序中。
支持面向對象程序設計的特征。C++既支持面向過程的程序設計,又支持面向對象的程序設計。
C++程序在可重用性、可擴充性、可維護性和可靠性等方面都較C語言得到了提高,使其更適合開發大中型的系統軟件和應用程序。
C++設計成靜態類型、和C同樣高效且可移植的多用途程序設計語言。
C++設計成直接的和廣泛的支援多種程序設計風格(程序化程序設計、資料抽象化、面向對象程序設計、泛型程序設計)。
C++設計成給程序設計者更多的選擇,即使可能導致程序設計者選擇錯誤。
C++設計成盡可能與C兼容,籍此提供一個從C到C++的平滑過渡。
C++避免平台限定或沒有普遍用途的特性。
C++不使用會帶來額外開銷的特性。
C++設計成無需復雜的程序設計環境。