PHP是目前世界上最流行的服務(wù)器端開(kāi)發(fā)語(yǔ)言之一。PHP 7作為PHP的新版本推出,它和PHP 5有不同點(diǎn),下面將分幾個(gè)方面對(duì)它們進(jìn)行比較,具體如下:
性能方面
PHP 7在性能方面有很大提升,據(jù)官方數(shù)據(jù)顯示,相比PHP 5,PHP 7的性能提升了至少2倍。PHP 7優(yōu)化了Zend Engine,引入了JIT(Just In Time)編譯器,可以針對(duì)當(dāng)前運(yùn)行的代碼進(jìn)行動(dòng)態(tài)編譯,從而提高執(zhí)行速度。
PHP 5中的OPCode Cache對(duì)于提高性能也有幫助,但PHP 7的性能提升更快。例如,以下是將10萬(wàn)個(gè)隨機(jī)數(shù)從小到大排序所需的時(shí)間。
// PHP 5代碼 $start = microtime(true); $arr = array(); for ($i=0; $i<100000; $i++) { $arr[$i] = rand(); } sort($arr); $end = microtime(true); echo $end - $start; // 輸出結(jié)果:0.04秒
// PHP 7代碼 $start = microtime(true); $arr = array(); for ($i=0; $i<100000; $i++) { $arr[$i] = rand(); } sort($arr); $end = microtime(true); echo $end - $start; // 輸出結(jié)果:0秒
可見(jiàn),PHP 7在性能方面有明顯提升。
兼容性方面
PHP 5和PHP 7的語(yǔ)法有一些細(xì)小的差異,例如,在PHP 7中去除了原來(lái)語(yǔ)法中的<?和<%=標(biāo)記。因此,當(dāng)在PHP 7中運(yùn)行使用了這些標(biāo)記的腳本時(shí),將拋出錯(cuò)誤。
如果是在PHP 5中開(kāi)發(fā)的項(xiàng)目,升級(jí)到PHP 7需要考慮兼容性問(wèn)題。不過(guò),目前市面上絕大多數(shù)PHP第三方庫(kù)和框架都已經(jīng)對(duì)PHP 7進(jìn)行了支持,建議在升級(jí)PHP時(shí)同時(shí)升級(jí)第三方庫(kù)和框架。
錯(cuò)誤處理方面
PHP 7在錯(cuò)誤處理方面進(jìn)行了一些改進(jìn)。PHP 5中try-catch語(yǔ)句只能捕獲異常,而不能捕獲致命錯(cuò)誤。PHP 7引入了Throwable接口,將拋出異常和致命錯(cuò)誤都?xì)w為了異常處理。因此,可以使用try-catch語(yǔ)句來(lái)捕獲致命錯(cuò)誤了。
// PHP 7代碼 try { // some bad code } catch(Throwable $t) { // Error/Exception caught }
數(shù)據(jù)類型方面
PHP 7在數(shù)據(jù)類型的處理方面也進(jìn)行了一些變化。PHP 5中,引入了對(duì)象自動(dòng)轉(zhuǎn)換機(jī)制,同一個(gè)數(shù)組中可以保存不同類型的數(shù)據(jù)。但這樣會(huì)產(chǎn)生一些難以發(fā)現(xiàn)的問(wèn)題。
PHP 7在處理這類問(wèn)題時(shí),更為嚴(yán)格。例如,在PHP 5中,以下語(yǔ)句是合法的:
$arr = array('a', 1); var_dump($arr[0] + $arr[1]); // 輸出2
而PHP 7中這樣的操作會(huì)拋出錯(cuò)誤。
此外,PHP 7也引入了標(biāo)量類型提示,可以指定函數(shù)的參數(shù)和返回值的類型。這個(gè)特性在開(kāi)發(fā)大型項(xiàng)目時(shí)可以讓代碼更加健壯、易于維護(hù)。
// PHP 7代碼 function add(int $a, int $b) : int { return $a + $b; }
在PHP 5中是不支持這種寫(xiě)法的。
總結(jié)
PHP 7相較于PHP 5,在性能、兼容性、錯(cuò)誤處理和數(shù)據(jù)類型方面都有一定的變化。如果是在已有的PHP 5項(xiàng)目的基礎(chǔ)上進(jìn)行升級(jí),則需要進(jìn)行逐一檢查和修改。而如果從零開(kāi)始開(kāi)發(fā),為了獲得更好的性能和更好的代碼質(zhì)量,則建議選擇PHP 7。