java與php區別或異同(整理、整合)

風來了發表於2016-10-02

收集了一下PHP和JAVA語言的相同或不同之處(來源在末尾有出處),已備後續使用做參考,在下一篇文章再詳細寫出,相同或者不同,可以讓我們快速入門JAVA 或者PHP。
java和php基礎部分相同或異同http://blog.csdn.net/fenglailea/article/details/52722710
風.fox

程式設計正規化:

Java:純物件導向的語言,有人說過:Java中一切皆物件!當然咯,人們都忘了Java的八種基本資料型別:int、double、boolean、byte、float、 long、short、char。但是念在每個Java每個基本資料型別都有包裝類(int的包裝類是Integer)的基礎上,就姑且認為一切是物件吧。

PHP:即使用可物件導向的方式程式設計,又可使用程式導向的方式。這種兩種程式設計正規化結合的語言代表了計算機語言以後的一個發展趨勢,在Scala、Golang、Python中都有體現。

語言型別:

Java:java是編譯型強型別的語言(或者說是靜態型別的語言),變數必須宣告型別,例如:“int i = 0;”這樣語言會比較嚴謹,不易出錯,對開發週期比較長的超大型專案的長期開發和維護比較有好處。Java原始檔是需要java編譯器編譯成class檔案的,雖說從JVM的角度而言,嚴格來講java也可以稱之為“解釋型”語言,因為畢竟是JVM解釋了class檔案,但是畢竟還是經過了java編譯器的編譯,況且直接編譯成了二進位制位元組碼檔案,所以就不較真了,算它是編譯型的把。

PHP:php是解釋型弱型別的語言(或者說是動態型別或者非靜態型別的語言),變數不必宣告型別,例如:“$i = 0;”這樣語言書寫起來會比較舒服,能夠讓人更專注於業務邏輯,利於提高開發效率。PHP檔案稱之為“PHP指令碼檔案”,它沒有被編譯,而是直接由PHP直譯器來解釋的,所以它是非編譯的解釋型語言。

目前流行“半弱半強”的編譯期自動型別判斷的編譯型靜態語言。例如:Golang、Swift、Scala等。

控制語句表示式基本型別等基本語法:

Java和PHP的基本語法基本相同,其實大部分的語言的基本語法也都相同,但是他們還是有一些細微的區別:

1、foreach語句:

PHP中的foreach語句和大多數語言一樣,就是中規中矩的foreach: foreach(arraysaselem){ $elem…} 。但是java卻根本沒有“foreach”這個關鍵字,取而代之的就是“for”,有人還給取了一個好聽的名字“增強for迴圈”,其實就是foreach語句:for(String elem:arrays){elem…}。

2、goto語句:

Java中有此關鍵字,實際中,卻不用。而是用continue或者break來代替此關鍵件字;但是PHP中出現不多,但是正常使用。
Java:

less:                                                                               
    for(int i=0;i<10;i++) 
    { 

      ........
      break less; 
     }

PHP:

less:                                                                               
    for($i=0;$i<10;$i++) 
    { 

      ........
     goto less; 
     } 

目前這個goto語句實在是用的太少,不論什麼語言。。。

3、基本資料型別:

Java是int、double、boolean、byte、float、long、short、char;
JAVA變數必須宣告型別(java是編譯型強型別的語言)

php是與Java類似的標量型別是:int、float、boolean、string,但是,php還把陣列array和object也歸為了基本資料型別之中,不僅如此,resource和NULL也是。
PHP變數不必宣告型別(PHP是解釋型弱型別的語言),且$符號作為變數的字首

語言的基本型別並非都是int、double等標量型別,還可能包含集合等其他複合的型別或者特殊型別。例如,Golang就把map陣列作為了基本型別。

4、檔案包含語句:

java中沒有,php獨有。此語句的作用是在其被呼叫的位置判斷幷包含一個檔案。(這個檔案的內容往往都是可以複用的元件)有:include()、include_once()、require()、require_once()四種。

include:其被呼叫的位置判斷幷包含一個檔案的內容。使用方法:include(filename)

include_once:和include功能一樣唯一的不同是如果包含了檔案,則不再執行include_once(),否則,必須包含該檔案。

require:很大程度上與include相同,但是有兩點不同:1、無論什麼條件,不論require包含的位置都會出現。例如:if(){require(…)}else{require(…)}無論是在if語句,還是else語句中,都會出現require的檔案。2、require()出錯時,指令碼停止執行,而include將會繼續執行。

require_once:確保被包含的檔案只包含檔案一次。

5、常量:

Java中沒有,需要自己定義。例如:public static final String SUNDAY = “Sunday”;

php中常用的有兩種常量,常用的有:define(“PI”,31.4)、和 const SUNDAY = “Sunday”;與java有對比意義的是第二種,與C語言類似的是第一種;還有一種常量是定義PHP系統級別的常量,定義完成中,可以在程式中直接使用。例如:要檢視當前PHP的版本:echo PHP_OS。 “PHP_OS”就是系統級別的常量

6.異常處理

java和php中的異常處理 幾乎相同

try{
//好好幹,出了問題不要怕,外面有人接應
}catch(HttpException $e){
 //時刻準備著,處理上面丟擲的
}catch(Exception $e){
//時刻準備著,處理他們都處理不了的問題
}finally(){
 //打掃戰場,都收拾好了再走人
}

OOP特性:

目前PHP所使用的主流程式設計正規化也是OOP,Java和PHP在此特性上極為相似,語法也極其相似,但是還是有略微不同:

呼叫方法或者屬性的符號:

1、呼叫屬性和方法:

java和大部分的語言一樣,就是用點“.”。例如:object.name; object.getName();

php使用的是箭頭“->”,例如:object>name;object->getName();

2、呼叫靜態類和類的常量:

java和大部分語言一樣,就是用點“.”。例如:Object.createName(); object.NAME;

php使用的是“::”。例如:Object::createName(); object::NAME

3、檔案名稱空間和匯入關鍵字:

java中是命名為“com.ryugou.space” 的package。
匯入其他的類:import “com.gouryu.space.Object”; //包名小寫,類名大寫。

php是命名為“com
yugouspace”的namespace,這倆關鍵字作用可認為相同。
匯入其他的類:use”ComGouRyuSpaceObject”;

JAVA包引用:import packageName.*;
PHP中沒有這個功能

4、建構函式和解構函式:

java中是和類名字相同的函式,無返回值;java中無解構函式

php中是通過名稱_ construct()來識別建構函式的;語法如下:function function([argument1,argument2, …])。php中還有類似於 C++的解構函式,用於當所用物件銷燬時來呼叫。解構函式的名字必須是 destruct();語法為:function _destruct()。注意:無引數。

5、訪問許可權:

java:private、protected、default、public; public,private不必多說;default表示同一個包內可見,protected表示同一包內的類和所有子類可見,什麼不都寫表示“default”。

php:private、protected、public;private、public不必多說;protected表示的所有子類可見(php中無包的概念,所以。。。),注意:什麼都不寫表示“public”。

6、方法過載:

java支援通過方法過載實現多型。
php不支援,且可能永遠都不支援。

7.類

類的宣告:java的class可以定義為public,此時檔名要與公共類完全一致,PHP中沒有這個功能
如果不包含公共類,則class與PHP宣告一樣

8.變數修飾符

靜態變數修飾符 static(兩者同)
靜態初始化器 static{}(PHP沒有)
最終常量 final(兩者同) (建議用static代替)
易失變數 volatile(PHP沒有)

9.方法修改飾

抽象方法 abstract(兩者同)
靜態方法 static (兩者同)
最終方法 final(兩者同)
本地方法 native(PHP沒有)
多執行緒同步方法 synchronized(PHP沒有)

10.方法定義

JAVA有返回值型別,
PHP必須有關鍵字function,PHP可以由返回值型別,也可以省略
JAVA中的main(String args[]),PHP中沒有

11.引數傳遞

值呼叫,引用呼叫
兩者幾乎相同

註釋

JAVA和PHP都支援 //或/**/

資料庫訪問比較

java通過jdbc來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。
PHP通過PDO來訪問資料庫,已經和JAVA類似,訪問資料庫的介面比較統一。

系統設計架構比較

兩種語言都可以使用OOP系統設計

跨平臺性

PHP和JAVA都支援跨平臺

開發成本比較

php最經典的組合就是:php + mysql + nginx/apache。非常適合開發中小型的web應用(大型應用也可以開發),開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。
java的web應用伺服器有免費tomcat、jboss等,如果需要更好的商業化的服務有:web sphere和web logic。

原始碼安全

java開發的程式,最後使用者拿到的是隻是一些編譯好的class類,無法看到完整的原始碼,安全性高。
PHP開發的程式,程式碼是開源的,也有可以把軟體原始碼加密的商業軟體
兩者幾乎差不多。java編譯的原始碼可以反編譯出來

設計模式六大原則類的特性

PHP和JAVA幾乎都一樣

框架

各有千秋 不好比較

其他區別

  1:java是半編譯語言,php是指令碼語言。
  2:java使用封裝繼承,最小的單位是類,php作為指令碼,最小單位就是語句,用兩者輸出hello world就知道了,所以java語法比較嚴格,而php很靈活
  。
  3:java是自動記憶體分配回收,php是一次建立一次銷燬。
  4:java可以常駐記憶體,多執行緒;php無法常駐記憶體,也沒有執行緒的概念。
5.PHP呼叫父類的建構函式不是使用super(),而是 parent

parent::__construct()。

PHP使用parent表示父類,這點同Java的super
6.PHP有解構函式,類似Java的finalize方法。例如:

public function __destruct () {
    echo "clear";
}

7.PHP使用this表示當物件,這點同Java的this
8.PHP使用self表示當前類,Java沒有這個關鍵字,也不需要使用表示類
9.PHP在呼叫本類中的靜態變數和方法時,必須使用self關鍵字和::,
java中直接使用 “.”

class A(){ 
    public static function foo () {
    echo “foo”;
    } 
    self :: foo (); 
} 

如果不在本類中則直接使用類名:

class A(){ 
    public static function foo () {
    echo “foo”;
    } 
} 
A :: foo ();

以上部分來源於
http://blog.csdn.net/i6448038/article/details/50352278
http://www.xuexila.com/baikezhishi/536806.html
http://www.myexception.cn/php/1955258.html
http://blog.163.com/lvshutao@126/blog/static/16463746720142212211595/


相關文章