亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP 7.2 新功能介紹

GeekQiaQia / 708人閱讀

摘要:這次發(fā)布包含新特性功能,及優(yōu)化,以讓我們寫出更好的代碼。安全性改進密碼哈希中的是榮獲年密碼哈希算法比賽中的冠軍的強大哈希算法,將其作為安全算法的替代品。是一個跨平臺和跨語言的庫,用于加密,解密,簽名,密碼哈希等。中函數(shù)已被取代。

PHP 7.2?已經(jīng)在 2017 年 11 月 30 日 正式發(fā)布 。這次發(fā)布包含新特性、功能,及優(yōu)化,以讓我們寫出更好的代碼。在這篇文章裡,我將會介紹一些 PHP 7.2 最有趣的語言特性。

你可以在 Requests For Comments 頁面查看完整的更動清單。

核心改進 參數(shù)類型聲明

從 PHP5 起,我們可以指定函數(shù)參數(shù)的預(yù)期聲明類型。如果傳參類型錯誤,PHP 就會拋出一個錯誤。

參數(shù)類型聲明?(也稱類型提示) 指定預(yù)期要傳參給函數(shù)或者類方法的參數(shù)類型。

這里有個例子:

class MyClass {
    public $var = "Hello World";
}

$myclass = new MyClass;

function test(MyClass $myclass){
    return $myclass->var;
}

echo test($myclass);

在這段代碼中,測試函數(shù)需要一個 MyClass 實例。不正確的參數(shù)數(shù)據(jù)類型會導(dǎo)致一個致命錯誤。

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8

從 PHP 7.2?類型提示?可以被用在對象型數(shù)據(jù)上,并且這個改進允許通用對象類型作為一個函數(shù)或者方法的參數(shù)。這里有個例子:

class MyClass {
    public $var = "";
}

class FirstChild extends MyClass {
    public $var = "My name is Jim";
}
class SecondChild extends MyClass {
    public $var = "My name is John";
}

$firstchild = new FirstChild;
$secondchild = new SecondChild;

function test(object $arg) {
    return $arg->var;
}

echo test($firstchild);

echo test($secondchild);

在以上示例中,我們調(diào)用了兩次測試函數(shù),每次都傳遞一個不同的對象。這在之前的 PHP 版本中是前所未有的。

在 Docker 中測試 PHP 7.0 和 PHP 7.2 的類型提示。

對象返回類型聲明

若變量類型指定函數(shù)參數(shù)的預(yù)期類型,返回值類型同樣也可以被指定預(yù)期類型。

返回類型聲明?指定一個函數(shù)應(yīng)該返回的預(yù)期類型。

PHP 7.2 起,對象數(shù)據(jù)類型可以使用返回類型聲明。這里有個例子:

class MyClass {
    public $var = "Hello World";
}

$myclass = new MyClass;

function test(MyClass $arg) : object {
    return $arg;
}

echo test($myclass)->var;

之前的 PHP 版本會拋出以下致命錯誤:

Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10

當然,PHP 7.2 的代碼會打印出?"Hello World"。

參數(shù)類型泛化

PHP 目前是不允許子類和它父類或者接口的參數(shù)類型有任何差異的。 這是什么意思呢?
參考下以下代碼:


這里我們省略了子類中的參數(shù)類型。 在 PHP 7.0 中,會產(chǎn)生以下警告:

Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8

從 PHP 7.2 起,我們可以忽略子類中的類型?而不會破壞任何代碼。這個方案使得我們可以在庫中升級類,從而可以使用類型提示,卻無需更新其所有的子類。

列表語法中的尾隨逗號

在 PHP 數(shù)組的最后一個元素上使用尾隨逗號是?合法語法?,并且?有時候鼓勵這么做?,可以很輕松的避免增加新元素的時候出現(xiàn)缺失逗號的錯誤。 從 PHP 7.2?在 分組命名空間 中,我們可以使用尾隨逗號?。

參閱 列表語法中的尾隨逗號?獲得 RFC 的直觀感知和一些示例代碼。

安全性改進 密碼哈希中的Argon2

Argon2?是榮獲 2015 年密碼哈希算法比賽中的冠軍的強大哈希算法, PHP 7.2 將其作為安全 ?Bcrypt 算法的替代品。
新版的 PHP 中引入了?PASSWORD_ARGON2I?常量,現(xiàn)在可以在?password_*?系列函數(shù)中使用:

password_hash("password", PASSWORD_ARGON2I);

與只使用一個 cost 因子的 Bcrypt 不同, Argon2 使用三個 cost 因子 區(qū)分如下:

定義哈希計算期間應(yīng)該消耗的KiB數(shù)量的內(nèi)存開銷(默認值為1 << 10或1024 KiB或1 MiB)

定義哈希算法迭代次數(shù)的時間開銷(默認值為2)

并行因子,用于設(shè)置哈希計算時使用的并行線程數(shù)(缺省值為2)

以下三個新常量定義了默認的 cost 因子:

PASSWORD_ARGON2_DEFAULT_MEMORY_COST

PASSWORD_ARGON2_DEFAULT_TIME_COST

PASSWORD_ARGON2_DEFAULT_THREADS

這里有個例子:

$options = ["memory_cost" => 1<<11, "time_cost" => 4, "threads" => 2];
password_hash("password", PASSWORD_ARGON2I, $options);

查閱?Argon2 密碼哈希?的更多信息。

Libsodium 成為 PHP 核心的組成部分

從 7.2 版開始,PHP 在其核心中涵蓋了?Sodium library?。?Libsodium?是一個跨平臺和跨語言的庫,用于加密,解密,簽名,密碼哈希等。
這個庫之前是?通過 PECL 來提供的。
有關(guān) Libsodium 函數(shù)列表,參閱?快速入門。
也可參閱?PHP 7.2: 第一個將現(xiàn)代加密技術(shù)添加到其標準庫的編程語言。

棄用

這里有個 PHP 7.2?棄用函數(shù)和特性?清單,PHP 8.0 之后將全部移除。

PHP 5.1 中 __autoload?函數(shù)已被?spl_autoload_register?取代?,F(xiàn)在會在編譯期間報一個棄用通知。

當拋出致命錯誤的時候,會創(chuàng)建 $php_errormsg?局部變量。 PHP 7.2?中應(yīng)該使用 error_get_last?和?error_clear_last?替代這種做法。

create_function()?可以創(chuàng)建一個具有函數(shù)名稱的函數(shù),將函數(shù)參數(shù)和函數(shù)體作為該函數(shù)的列表傳入。因為安全問題和性能表現(xiàn)不佳,它被標記為棄用,鼓勵用封裝替代。

mbstring.func_overload?ini 設(shè)置為非零值已經(jīng)被標記為棄用。

(unset) cast?是個總是返回 null 的表達式,并且毫無用處。

如果傳入第二個參數(shù),parse_str()?將查詢字符串解析到數(shù)組當中, 否則解析到本地符號表。 因為安全原因, 不建議 在函數(shù)作用域中動態(tài)設(shè)置變量,使用不帶第二個參數(shù)的 parse_str() 將拋一個棄用通知。

gmp_random()?是平臺相關(guān)的,將會被廢棄。使用 gmp_random_bits()?和?gmp_random_rage()?代替。

each() 在數(shù)組上迭代的行為非常像?foreach(),但 foreach()?基于一些原因而成為更優(yōu)選擇,例如它的速度快上 10 倍?,F(xiàn)在在循環(huán)中使用前者將會拋出一個廢棄提示。

?assert()?函數(shù)檢查給定的斷言,并在結(jié)果為 FALSE 的時候進行相關(guān)處理。 帶有字符串參數(shù)的 assert() 現(xiàn)在已經(jīng)棄用,因為它有 RCE 漏洞。?zend.assertion?ini 選項可以關(guān)閉斷言表達式。

$errcontext?是一個包含產(chǎn)生錯誤時的局部變量數(shù)組。它可被作為錯誤處理程序?set_error_handler()?函數(shù)的最后一個參數(shù)。

PHP 7.2 對 WordPress 用戶意味著什么?

根據(jù)官方?WordPress 統(tǒng)計頁 所示,截至撰寫本文時,只有 19.8% 的 WordPress 用戶升級到了 PHP 7。只有 5%使用?PHP 7.1。你可以看到超過 40% 的用戶仍然使用 PHP 5.6,更可怕的是超過 39% 的用戶在使用已經(jīng)不受支持的 PHP 版本。截至 2016 年 12 月,WordPress.org?為 PHP 5.6 版本的用戶修改 官方建議?為建議使用 PHP 7 或以上的版本。

WordPress PHP 7.1 數(shù)據(jù)統(tǒng)計

以上的數(shù)據(jù)表現(xiàn)并不令人愉悅,因為看上去 PHP 7 好像更快點。下面是一些統(tǒng)計數(shù)據(jù):

PHP?官方 基準測試?顯示 PHP 7 允許系統(tǒng)每秒執(zhí)行2次請求,與 PHP 5.6 相比,幾乎只是一般的延遲。

Christian Vigh 也發(fā)布了一個?PHP 性能測試對比?他發(fā)現(xiàn) PHP 5.2 比 PHP 7 慢了近 400%。

我們在 2018 運行了性能基準測試?PHP 5.6 vs PHP 7 vs HHVM。與上述基準測試類似,我們發(fā)現(xiàn) PHP 7.2 與 PHP 5.6 相比每秒可執(zhí)行幾乎三倍數(shù)量的事務(wù)(請求)。

WordPress 基準測試

WordPress 4.9.4 PHP 5.6 基準測試結(jié)果:?49.18 req/sec

WordPress 4.9.4 PHP 7.0 基準測試結(jié)果: 133.55 req/sec

WordPress 4.9.4 PHP 7.1 基準測試結(jié)果:134.24 req/sec

WordPress 4.9.4?PHP 7.2 基準測試結(jié)果:148.80 req/sec??

WordPress 4.9.4 HHVM 基準測試結(jié)果:144.76 req/sec

許多東西在僅僅在更新上比較慢,因為要花時間去參與測試所有新的第三方插件和主題確保它們可以正常運行。很多時候,慢是因為它們還沒完成。不確定你運行的 PHP 是什么版本?其中一個很最簡單的方法就是使用這個工具 ?Pingdom? 或者 Google Chrome開發(fā)工具.。第一個 HTTP 請求頭一般將會展示你的版本。

檢查 PHP 版本

這將依賴于主機不修改 X-Powered-By 頭信息的值。如果修改了的話,你可能就看不到 PHP 的版本信息了,這種情況下你需要?通過 FTP 上傳文件.?;蛘吣憧偸侨ピ儐栔鳈C。

升級到?PHP 7.2

PHP 7.2 還有一部分沒完成,但是你可以先嘗嘗鮮。你可以?測試你的 WordPress 本地站點?或者在類似?Docker 環(huán)境中檢查你的腳本,你可以在命令行中測試比較不同的 PHP 版本。

結(jié)語

準備好切換到 PHP 7.2 了嗎?不過至少希望你首先已經(jīng)過渡到了 PHP 7 以上的版本了。如果你現(xiàn)在還沒準備好測試的話,那么,升級你的腳本,檢查你的代碼,說說你對 PHP 7.2 的首次體驗。

更多現(xiàn)代化 PHP 知識,請前往 Laravel / PHP 知識社區(qū)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/28606.html

相關(guān)文章

  • PHP 7.2中的功能(參數(shù)類型聲明)

    摘要:在這篇文章中,我將介紹一些中最有趣的語言特性參數(shù)類型聲明。參數(shù)類型聲明也稱為類型提示指定預(yù)期傳遞給函數(shù)或類方法的變量的類型。參數(shù)類型寬限聲明目前不允許子類和它們的父類或接口之間的參數(shù)類型有任何差異。 PHP 7.2已于 11月30日正式發(fā)布,該版本具有新特性,功能和改進,可以讓我們編寫更好的代碼。在這篇文章中,我將介紹一些PHP 7.2中最有趣的語言特性-參數(shù)類型聲明。 參數(shù)類型聲明 ...

    Paul_King 評論0 收藏0
  • Use PHP7

    摘要:說明目前中,計劃于月日發(fā)布。安全改進密碼哈希中的是一個強大的哈希算法,被選為年密碼哈希大賽的冠軍,將它作為算法的安全替代品。已將設(shè)置為非零值已被標記為已棄用。被認為是平臺相關(guān)的,將被棄用。 說明 目前RC3中,PHP 7.2計劃于11月30日發(fā)布。新版本將提供新的特性,功能和改進,使我們能夠編寫更好的代碼。在這篇文章中,我將介紹一些PHP 7.2中最有趣的語言特性。 參數(shù)類型聲明 從P...

    yearsj 評論0 收藏0
  • PHP 5.6,7.0,7.1,7.2 和 HHVM 運行效率比較

    摘要:測試運行多次并取平均值。文章數(shù)量測試的基準測試基準測試結(jié)果基準測試結(jié)果基準測試結(jié)果基準測試結(jié)果基準測試結(jié)果基準測試結(jié)果不支持再次成為冠軍請注意的運行環(huán)境需要或以上。同時,再次不能正常工作并拋出錯誤。 showImg(https://segmentfault.com/img/remote/1460000013690286); 我們每年都會嘗試深入了解不同版本的 PHP 和 HHVM 在各...

    cnTomato 評論0 收藏0
  • CentOS 7 安裝 PHP 7.2

    摘要:本文將介紹如何在服務(wù)器上使用命令安裝,內(nèi)容提煉自外文網(wǎng)站,點擊查看原文。 本文將介紹如何在 CentOS 7 服務(wù)器上使用 yum 命令安裝 PHP7.2,內(nèi)容提煉自外文網(wǎng)站,點擊查看原文。 安裝 PHP7.2 安裝 EPEL 軟件包: $ sudo yum install epel-release 安裝 remi 源: $ sudo yum install http://rpms.r...

    TANKING 評論0 收藏0
  • php 程序員 命令行指南 持續(xù)總結(jié)更新 mac

    摘要:直接強制結(jié)束程序。在用掛起程序時,當想要結(jié)束這個程序,最好用。能夠模擬在控制臺結(jié)束程序的功能。 向 host 文件快速添加新網(wǎng)址配置 echo 127.0.0.1 your.domian.com | sudo tee -a /etc/hosts NGINX 配置 #nginx禁止訪問.點號開頭的文件 location ~* /.* { deny all; } #nginx 禁止訪問.s...

    gyl_coder 評論0 收藏0

發(fā)表評論

0條評論

GeekQiaQia

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<