PHP 有什麼特殊之處?與 Java 的淺層比較

來源:互聯網
上載者:User
tags: 編程 Java PHP

PHP中的變數以$符號開頭,如果是全域變數則是以$_開頭並且都大寫,如$_REQUEST。在Java中變數可以是字母(a-z)、底線(-)或者貨幣符號($)開頭,並且變數必須先有型別宣告,如int i = 0,隨後才能使用。但是PHP卻不用,它的類型完全由賦值確定。你給它什麼,它就是什麼。那為什麼要強制使用美元符開頭呢?

記得在PHP中有這樣的輸出語句 echo "$name is me.",假如沒有美元符,PHP又如何識別$name是一個變數呢?

講到輸出語句,就不得單雙引號在PHP中區別。

在Java中,我們使用輸出語句通常是System.out.println();括弧裡可以是任意基本類型+String。而在PHP中輸出語句更豐富,有echo,print,print_r還有var_dump。以echo為例,假定$name = 'Lshare';。對於echo '$name is me.',PHP將不會對單引號裡面的字串進行解析,而是直接輸出$name is me.;對於echo "$name is me.",PHP對雙引號裡的字串進行解析,輸出Lshare is me.。雙引號的代價是效率上比單引號差,但可讀性好。為了提高效能,你可能這樣使用 echo $name.' is me.'或echo $name,' is me.',明顯可讀性會差點,但是效能上比用雙引號好,因為不用去解析引號內的字串了。

有趣的是echo和print他們並不是函數,而是語言結構,就好像if、else那樣。你既可以使用()來輸出單個參數,也可以使用''或""輸出多個參數,中間用,隔開,如上文中的echo $name,' is me.'。這就是它的文法,就好像你學習if...else...一樣,懂了這些才可以隨心所欲而不逾矩。

初學者可能會對這樣的語句感到疑惑echo '
',認為瀏覽器應該直接輸出
,因為單引號內,PHP是不會進行解析的。哈,PHP是不解析,但是瀏覽器解析啊。回想一下,瀏覽器不就是接收Html類型的資料,然後解析呈現給使用者嗎?PHP把
給了瀏覽器,然後瀏覽器解析成換行,難道有什麼不對嗎?

再談談數組。

在Java中我們通過int[] arr = new int[]{1,2,3};來建立一個數組,而在PHP中確實用array()函數來建立的。而且PHP中的數組還有索引值對的概念,這不是跟Java中的Map很像嗎?你可以不指定鍵,它會預設從0開始作為索引鍵;你也可以使用=>來指定鍵。如下:

$arr = array(     "1"=>"Google",    "3"=>"Microsoft",    "2"=>"Apple");

說到數組就不得不談談遍曆

遍曆可以使用for迴圈,也可以使用foreach迴圈。for迴圈跟Java中的差不多,不談,還是談談foreach迴圈有趣。在Java中的foreach迴圈是這樣的:

int[] arr = new int[]{1,2,3};for(int item:arr){//":"前面是數組中元素的類型和臨時變數,後面的是數組    System.out.println(item);}

而在PHP中是這樣的:

$arr = array(    1,2,3);//第一種foreach($arr as $value){//as前面是數組,後面是數組中元素的臨時變數。    echo "$value
";}//第二種foreach($arr as $key=>$value){//同上,不過同時儲存了索引值。 echo "$key = $value
";}

簡潔了好多有木有?網路時代講究的簡潔高效,不浪費頻寬,PHP就是這樣。

談談字串和數組的轉化

在Java中將字串切割成數組,最簡單的是這樣:

String str = "1-2-3";String[] arr = str.splite("-");

而在PHP中提供了explode函數:

$str = "1-2-3"; $arr = explode("-",$str);

在Java中將數組轉成字串

String str2 = Arrays.toString(arr);//是"[1, 2, 3]"//或者要自定輸出格式的話StringBuilder sb = new StringBuilder();for(int i=0;i   

而在PHP中沒那麼麻煩,直接用implode函數就夠了。

$str2 = '['.implode(",",$arr).']'; //是"[1, 2, 3]"$str3 = implode("-",$arr); //是"1-2-3"

一切變得如此簡潔,世界一下子就好了。

說到數組,還真的避不了數組排序

在Java中提供了Arrays.sort()的許多重載方法,用於數組的排序。

int[] ranks = new int[]{2,9,1,5,7};//使用預設的比較子,進行升序排序Arrays.sort(ranks); //為 "[1, 2, 5, 7, 9]"//自訂比較子,進行降序排序Integer[] ranks = new Integer[]{2,9,1,5,7};Arrays.sort(ranks, new Comparator() {    @Override    public int compare(Integer o1, Integer o2) {        return o2-o1;    }});// 為 "[9, 7, 5, 2, 1]"

在PHP中沒那麼麻煩,當然定製性沒那麼好。

$ranks = array(    2,9,1,5,7);sort($ranks); //按值升序排序rsort($ranks); //r表示reverse,相反的意思。按值降序排序asort($ranks); //a表示association,索引值聯絡的意思。保持索引值關係升序排序arsort(); //保持索引值關係降序排序ksort($ranks); //k表示key,按鍵升序排序krsort(); //按鍵降序排序

再說一點表單的

當使用表單提交多選的值時,要注意name屬性的值後面要帶"[]",不然PHP中接收的是單個值而不是一個數組。如:

client.html

   

server.php

      
 

本文標題: PHP 有什麼特殊之處?與 Java 的淺層比較文章作者: IT協會知識庫許可協議: ©署名-非商用-相同方式共用 4.0"

知識共用許可協議

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.