国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 7.2 新功能介紹

GeekQiaQia / 636人閱讀

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

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

你可以在 Requests For Comments 頁(yè)面查看完整的更動(dòng)清單。

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

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

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

這里有個(gè)例子:

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

$myclass = new MyClass;

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

echo test($myclass);

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

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?類型提示?可以被用在對(duì)象型數(shù)據(jù)上,并且這個(gè)改進(jìn)允許通用對(duì)象類型作為一個(gè)函數(shù)或者方法的參數(shù)。這里有個(gè)例子:

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)用了兩次測(cè)試函數(shù),每次都傳遞一個(gè)不同的對(duì)象。這在之前的 PHP 版本中是前所未有的。

在 Docker 中測(cè)試 PHP 7.0 和 PHP 7.2 的類型提示。

對(duì)象返回類型聲明

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

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

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

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

$myclass = new MyClass;

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

echo test($myclass)->var;

之前的 PHP 版本會(huì)拋出以下致命錯(cuò)誤:

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

當(dāng)然,PHP 7.2 的代碼會(huì)打印出?"Hello World"。

參數(shù)類型泛化

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


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

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

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

列表語(yǔ)法中的尾隨逗號(hào)

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

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

安全性改進(jìn) 密碼哈希中的Argon2

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

password_hash("password", PASSWORD_ARGON2I);

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

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

定義哈希算法迭代次數(shù)的時(shí)間開(kāi)銷(默認(rèn)值為2)

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

以下三個(gè)新常量定義了默認(rèn)的 cost 因子:

PASSWORD_ARGON2_DEFAULT_MEMORY_COST

PASSWORD_ARGON2_DEFAULT_TIME_COST

PASSWORD_ARGON2_DEFAULT_THREADS

這里有個(gè)例子:

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

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

Libsodium 成為 PHP 核心的組成部分

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

棄用

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

PHP 5.1 中 __autoload?函數(shù)已被?spl_autoload_register?取代。現(xiàn)在會(huì)在編譯期間報(bào)一個(gè)棄用通知。

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

create_function()?可以創(chuàng)建一個(gè)具有函數(shù)名稱的函數(shù),將函數(shù)參數(shù)和函數(shù)體作為該函數(shù)的列表傳入。因?yàn)榘踩珕?wèn)題和性能表現(xiàn)不佳,它被標(biāo)記為棄用,鼓勵(lì)用封裝替代。

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

(unset) cast?是個(gè)總是返回 null 的表達(dá)式,并且毫無(wú)用處。

如果傳入第二個(gè)參數(shù),parse_str()?將查詢字符串解析到數(shù)組當(dāng)中, 否則解析到本地符號(hào)表。 因?yàn)榘踩颍?不建議 在函數(shù)作用域中動(dòng)態(tài)設(shè)置變量,使用不帶第二個(gè)參數(shù)的 parse_str() 將拋一個(gè)棄用通知。

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

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

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

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

PHP 7.2 對(duì) WordPress 用戶意味著什么?

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

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

以上的數(shù)據(jù)表現(xiàn)并不令人愉悅,因?yàn)榭瓷先?PHP 7 好像更快點(diǎn)。下面是一些統(tǒng)計(jì)數(shù)據(jù):

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

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

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

WordPress 基準(zhǔn)測(cè)試

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

WordPress 4.9.4 PHP 7.0 基準(zhǔn)測(cè)試結(jié)果: 133.55 req/sec

WordPress 4.9.4 PHP 7.1 基準(zhǔn)測(cè)試結(jié)果:134.24 req/sec

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

WordPress 4.9.4 HHVM 基準(zhǔn)測(cè)試結(jié)果:144.76 req/sec

許多東西在僅僅在更新上比較慢,因?yàn)橐〞r(shí)間去參與測(cè)試所有新的第三方插件和主題確保它們可以正常運(yùn)行。很多時(shí)候,慢是因?yàn)樗鼈冞€沒(méi)完成。不確定你運(yùn)行的 PHP 是什么版本?其中一個(gè)很最簡(jiǎn)單的方法就是使用這個(gè)工具 ?Pingdom? 或者 Google Chrome開(kāi)發(fā)工具.。第一個(gè) HTTP 請(qǐng)求頭一般將會(huì)展示你的版本。

檢查 PHP 版本

這將依賴于主機(jī)不修改 X-Powered-By 頭信息的值。如果修改了的話,你可能就看不到 PHP 的版本信息了,這種情況下你需要?通過(guò) FTP 上傳文件.。或者你總是去詢問(wèn)主機(jī)。

升級(jí)到?PHP 7.2

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

結(jié)語(yǔ)

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28606.html

相關(guān)文章

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

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

    Paul_King 評(píng)論0 收藏0
  • Use PHP7

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

    yearsj 評(píng)論0 收藏0
  • PHP 5.6,7.0,7.1,7.2 和 HHVM 運(yùn)行效率比較

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

    cnTomato 評(píng)論0 收藏0
  • CentOS 7 安裝 PHP 7.2

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

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

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

    gyl_coder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

GeekQiaQia

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<