1. 程式人生 > >從PHP5到PHP7的注意事項

從PHP5到PHP7的注意事項

原文地址:https://www.phpxy.com/article/25.html

PHP7是大勢所趨了。PHP7有更多的新特性,更好的效能,更高的速度。並且,從今年8月7日開始發行PHP7.0的beta3 即將釋出的PHP7 的RC1版本。腳步越來越近,有更多的人來學習PHP7的新特性。PHP學院將對PHP7的新特性進行連載。

並且,現在國內PHPer中喜歡嘗新鮮的人一些人,已經安裝好了PHP7。我們來看看PHP7 到底有哪些新特性。

今天我們來講解的是PHP提倡的一些風格,並且將原有PHP4當中的一些風格進行了禁用。

1,PHP5發行的時候為了討好ASP程式設計師,PHP準備了asp_tags全部被禁止

在未來沒有<%  %> 這種風格,PHP也不再支援這種風格的宣告。

<script language="php"></script>

2,PHP4的語法風格中的一些東西將被,例如建構函式的用法,會在新的PHP7中完全被拋棄。PHP7將會提示一個:E_DEPRECATED的錯誤提示。

<?php

class foo {

    //方法名類名相同的建構函式的用法不再相容
    function 
foo() {
        echo 
'I am the constructor';
    }
}
?>

1. define定義常量不僅僅只支援標量,還支援了陣列

<?php
define
('PHPXY', array(
    
'鳳姐',
    
'芙蓉姐姐',
    
'楊冪是臭腳'
));

echo 
PHPXY[1]; // 輸出的結果是“芙蓉姐姐”
?>

2.比較的時候支援<=> 可以比較字串,陣列,整型。

<?php

// Integers
echo <=> 1// 0
echo <=> 2// -1
echo <=> 1// 1

PHP學院評:我們認為實際使用者不大,在實際工作中使用量不會很高

3.在PHP7 中支援了 函式的強制引數型別指定

<?php

// Coercive mode
function sumOfInts(int ...$ints)
{
    return 
array_sum($ints);
}

var_dump(sumOfInts(2'3'4.1));

//本例中會輸出9,你想想為什麼喲?——因為強制規定為了整型

PHP學院評:function funcName(... 引數) 是PHP5.6開始支援的。不要認為是PHP7裡的知識點

4. 返回型別也在強制進行規定

function arraysSum(array ...$arrays): array
{
    return 
array_map(function(array $array): int {
        return 
array_sum($array);
    }, 
$arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

5. 新建了call方法在外部來呼叫,更短的方式將匿名函式,追加進對向中且完成呼叫

class {private $x 1;}

// Pre PHP 7 code
$getXCB = function() {return $this->x;};
$getX $getXCB->bindTo(new A'A'); // intermediate closure
echo $getX();

// PHP 7+ code
$getX = function() {return $this->x;};
echo 
$getX->call(new A);

6. 成員方法中也可以規定必須要返回某個類型別

class {}
class 
extends {}

class 
C
{
    public function 
test() : A
    
{
        return new 
A;
    }
}

世界上最悲慘的事情不是你在我面前你不知道我愛你。而是——你在七夕開房,我卻在學習新知識。對於我等程式狗、單身狗來說,唯一努力學習新的知識或者才能逆轉。變成富帥,早日迎取白富美吧。而PHP7的刪除的一些函式是我們必須的.

PHP手冊中,為了專門應對大家的升級,為大家將PHP7中刪除的一些函式進行了說明和整理。如果你在專案中使用到了這些函式,請整個專案進行查詢,修改。

1. call_user_method() 和 call_user_method_array()

2. mcrypt_generic_end() alias in favor of mcrypt_generic_deinit()

3.棄用  mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() and mcrypt_ofb() 有利於mcrypt_decrypt() 的引數 MCRYPT_MODE_*

4.棄用 datefmt_set_timezone_id() 和IntlDateFormatter::setTimeZoneID() 有利於 datefmt_set_timezone() 或者IntlDateFormatter::setTimeZone()

5. set_magic_quotes_runtime() 和它的別名函式 magic_quotes_runtime()

6. set_socket_blocking() 有利於它的別名函式  stream_set_blocking()

7. 來自於fast-cgi的dl()

8.   T1Lib 支援刪除,所以刪除:imagepsbbox(), imagepsencodefont(), imagepsextendedfont(), imagepsfreefont(), imagepsloadfont(), imagepsslantfont(), imagepstext()

原本的PHP7 新特性的連載計劃出現了一點點小的耽擱,我們將PHP7 RC1版本的官方新聞通稿進行了翻譯。這就是大家等了很久的PHP7.0 RC1版本。

所謂RC版本,就是即將正式推行的版本。(Release Candidate) 用在軟體上就是候選版本。系統平臺上就是發行候選版本。RC版不會再加入新的功能了,主要著重於除錯。

PHP開發團隊宣佈PHP 7.0.0 RC 1的版本是一個即將可用的版本。你可以詳細的測試,並將將遇到的問題,報告給PHP的BUG 跟蹤系統。

1. PHP7 的速度高達php 5.6 兩倍之巨

2. 更好的支援64位作業系統

3. 更多的錯誤支援和新的錯誤捕獲

  • 4. 刪除一些不支援的函式和不支援的SAPIs和擴充套件
  • 5. 空合併運算子( ??)
  • 6. 綜合比較運算子(<=>)
  • 7. 返回型別宣告
  • 8 .標量型別宣告
  • 9 .匿名類

PHP刪除了一些函式,其中是嚇人的是兩個:

1. ereg_* 系列的正則函式

2. mysql_* 系列的資料庫連線函式

PHP7全面刪除Mysql擴充套件支援,原本的mysql_*系列函式將在mysql中不再得到支援。所以說,如果你的應用系統還是使用的是mysql_*系列的函式來連線資料庫,請儘快升級你的mysql系列的函式。

我們來看看,PHP7 刪除的擴充套件到底有哪些:

  • 1. ereg
  • 2. mssql
  • 3. mysql
  • 4. sybase_ct

替代處理和解決方案:

一、 如果你要連線微軟的sql server資料庫請使用PDO方案來代規

二、 如果你使用的mysql系列函式擴充套件來連線資料庫,請採用效率更高的mysql_nd系列函式。他具有更高的效率

三、 如果你採用的是ereg 系列,儘快改吧。

四、sybase_ct 全面改為sybase*系列吧

很多朋友都不知道什麼是SAPI,並且不知道SAPI與PHP的關係,本章在瞭解PHP7 刪除了哪些SAPI的同時,你可以瞭解到更深入的PHP的內部處理機制,並且瞭解到有哪些SAPI是被刪除 

SAPI指的是PHP具體應用的程式設計介面, 就像PC一樣,無論安裝哪些作業系統,只要滿足了PC的介面規範都可以在PC上正常執行, PHP指令碼要執行有很多種方式,通過Web伺服器,或者直接在命令列下,也可以嵌入在其他程式中。

  • aolserver
  • apache
  • apache_hooks
  • apache2filter
  • caudium
  • continuity
  • isapi
  • milter
  • nsapi
  • phttpd
  • pi3web
  • roxen
  • thttpd
  • tux
  • webjames

上面的這些SAPI們將不會支援了。