成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一篇文章幫你了解 PHP 7.3 更新

劉玉平 / 2242人閱讀

摘要:文章轉(zhuǎn)自目前依舊是其它腳本語言強勁的競爭對手,這主要歸功于其核心維護團隊的快速更新。有時我們在數(shù)組內(nèi)以及函數(shù)調(diào)用尤其是可變參函數(shù)時需要傳遞大量元素,若是漏掉一個逗號,便會報錯。在可變參函數(shù)例如內(nèi),更是如此。

文章轉(zhuǎn)自:https://learnku.com/php/t/21549 

PHP 目前依舊是其它腳本語言強勁的競爭對手,這主要歸功于其核心維護團隊的快速更新。

自從 PHP 7.0 發(fā)布以來,社區(qū)見證了許多新特性的誕生,極大地改進了開發(fā)者在項目中應(yīng)用 PHP 的方式。提高 PHP 應(yīng)用的性能和安全性,是這些改進的主要目的。

PHP 最近實現(xiàn)了又一個里程碑 ——?發(fā)布 PHP 7.3。新版本帶來了一些急需的更新。

在本文中,我將論述新推出的 PHP 7.3 特性 和更新。好消息是,你可以在你的測試服務(wù)器上自行安裝新版本、查看新功能。但老生常談,切勿在生產(chǎn)服務(wù)器上使用 RC 版本更新,可能會破壞你已經(jīng)上線的應(yīng)用。

以下是7.3版中引入的一些更新,與以前的版本相比,它們大大提高了?PHP 7.3 的性能?。

靈活的 Heredoc 和 Nowdoc 語法

函數(shù)調(diào)用時允許尾隨逗號

JSON_THROW_ON_ERROR

PCRE2 遷移

list() 分配參考

is_countable 函數(shù)

array_key_first(), array_key_last()

Argon2 密碼哈希增強功能

棄用和刪除 image2wbmp()

棄用和刪除不區(qū)分大小寫的常量

相同站點 Cookie

FPM 更新

改進 Windows 下的文件刪除

讓我們逐一討論上述的每一個更新。

靈活的 Heredoc 和 Nowdoc 語法

Heredoc?和 Nowdoc?語法能夠在使用多行長字符串時起到很大幫助。它要求結(jié)束標識符應(yīng)當為出現(xiàn)在新行的首個字符串。

// 除了這樣:

$query = <<

總的來說,此更新提出了兩項改進,如下:

閉合標識符前支持縮進

閉合標識符后不再強制換行

在上面的例子里,可以很容易地看出這些改動。

函數(shù)調(diào)用中允許尾部逗號

在參數(shù)、元素、變量列表結(jié)尾,追加尾部逗號。有時我們在數(shù)組內(nèi)以及函數(shù)調(diào)用(尤其是可變參函數(shù))時需要傳遞大量元素,若是漏掉一個逗號,便會報錯。鑒于如上情況,尾部逗號便顯得十分有用。這個特性已經(jīng)允許在數(shù)組內(nèi)使用,并且從 PHP 7.2 開始,分組命名空間(Grouped Namespaces)語法也開始支持尾部逗號。

use FooBar{
???Foo,
???Bar,
};

$foo = [
???"foo",
???"bar",
];

當新值需要被追加在此處時,尾部逗號便顯得十分實用。在可變參函數(shù)例如 unset() 內(nèi),更是如此。

unset(
???$foo,
???$bar,
???$baz,
);

同時,當你使用 compact() 函數(shù)給模版引擎?zhèn)鬟f一批變量時,也是個能用到的例子。

echo $twig->render(
???"index.html",
???compact(
???????"title",
???????"body",
???????"comments",
???)
);

在某些需要構(gòu)造連續(xù)或分組數(shù)據(jù)情況下,經(jīng)常要使用 array_merge() 函數(shù)合并數(shù)組。也可以利用尾部逗號:

$newArray = array_merge(
???$arrayOne,
???$arrayTwo,
???["foo", "bar"],
);

同樣,你也可以在調(diào)用任意方法、函數(shù)以及閉包時使用此特性。

class Foo
{
?public function __construct(...$args) {
???//
?}

?public function bar(...$args) {
???//
?}

?public function __invoke(...$args) {
???//
?}
}

$foo = new Foo(
?"constructor",
?"bar",
);

$foo->bar(
?"method",
?"bar",
);

$foo(
?"invoke",
?"bar",
);
JSON_THROW_ON_ERROR

解析 JSON 響應(yīng)數(shù)據(jù),有 json_encode() 以及 json_decode() 兩個函數(shù)可供使用。不幸的是,它們都沒有恰當?shù)腻e誤拋出表現(xiàn)。json_encode 失敗時僅會返回 false;json_decode 失敗時則會返回 null,而 null 可作為合法的 JSON 數(shù)值。唯一獲取錯誤的方法是,調(diào)用 json_last_error()json_last_error_msg(),它們將分別返回機器可讀和人類可讀的全局錯誤狀態(tài)。

該 RFC 提出的解決方案是,為 JSON 函數(shù)新增 JSON_THROW_ON_ERROR 常量用于忽略全局錯誤狀態(tài)。當錯誤發(fā)生時,JSON 函數(shù)將會拋出 JsonException 異常,異常消息(message)為 json_last_error() 的返回值,異常代碼(code)為 json_last_error_msg() 的返回值。如下是調(diào)用例子:

json_encode($data, JSON_THROW_ON_ERROR);

json_decode("invalid json", null, 512, JSON_THROW_ON_ERROR);

// 拋出 JsonException 異常
升級 PCRE2

PHP 使用 PCRE 作為正則表達式引擎。但從 PHP 7.3 開始,PCRE2 將作為新的正則引擎大顯身手。所以,你需要將現(xiàn)有的正則表達式遷移到符合 PCRE2 的規(guī)則。這些規(guī)則比以前更具侵入性。請看以下實例:

preg_match("/[w-.]+/", "");

這個表達式在新版 PHP 內(nèi)將會匹配失敗且不會觸發(fā)警告。因為 PCRE2 現(xiàn)嚴格要求,若需匹配連字符(-)而非用于表示范圍,則必須移動到末尾或?qū)⑵滢D(zhuǎn)義。

更新到 PCRE2 10.x 后,支持了以下以及更多特性:

相對后向引用 g{+2}(等效于已存在的 g{-2}

PCRE2 版本檢查 (?(VERSION>=x)...)

(*NOTEMPTY)(*NOTEMPTY_ATSTART) 告知引擎勿返回空匹配

(*NO_JIT) 禁用 JIT 優(yōu)化

(*LIMIT_HEAP=d) 限制堆大小為 d KB

(*LIMIT_DEPTH=d) 設(shè)置回溯深度限制為 d

(*LIMIT_MATCH=d) 設(shè)置匹配數(shù)量限制為 d

譯者注:國內(nèi)正則術(shù)語參差不一,「后向引用」—— Back References,又稱「反向引用」、「回溯引用」等,此處參考 PHP 官方手冊的中文譯本。
list() 賦值引用

PHP 中的 list() 現(xiàn)在可以賦值給引用,在當前版本中 list() 中賦值不能使用引用,在 PHP 7.3 中將允許使用引用,新改進的語法如下:

$array = [1, 2];
list($a, &$b) = $array;

相當于

$array = [1, 2];
$a = $array[0];
$b =& $array[1];

在 PHP 7.3 的變更中,我們還可以與 foreach() 方法一起嵌套使用

$array = [[1, 2], [3, 4]];
foreach ($array as list(&$a, $b)) {
???$a = 7;
}
var_dump($array);
is_countable 函數(shù)

在 PHP 7.2 中,用 count() 獲取對象和數(shù)組的數(shù)量。如果對象不可數(shù),PHP 會拋出警告?? 。所以需要檢查對象或者數(shù)組是否可數(shù)。 PHP 7.3 提供新的函數(shù) is_countable()?來解決這個問題。

該 RFC 提供新的函數(shù) is_countable(),對數(shù)組類型或者實現(xiàn)了 Countable 接口的實例的變量返回 true 。

之前:

if (is_array($foo) || $foo instanceof Countable) {
???// $foo 是可數(shù)的
}

之后:

if (is_countable($foo)) {
???// $foo 是可數(shù)的
}
array_key_first(), array_key_last()

當前版本的 PHP 允許使用 reset()end()key() 等方法,通過改變數(shù)組的內(nèi)部指針來獲取數(shù)組首尾的鍵和值?,F(xiàn)在,為了避免這種內(nèi)部干擾,PHP 7.3 推出了新的函數(shù)來解決這個問題:

$key = array_key_first($array); 獲取數(shù)組第一個元素的鍵名

$key = array_key_last($array); 獲取數(shù)組最后一個元素的鍵名

讓我們看一個例子:

// 關(guān)聯(lián)數(shù)組的用法
$array = ["a" => 1, "b" => 2, "c" => 3];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array);

assert($firstKey === "a");
assert($lastKey === "c");

// 索引數(shù)組的用法
$array = [1 => "a", 2 => "b", 3 => "c"];

$firstKey = array_key_first($array);
$lastKey = array_key_last($array);

assert($firstKey === 1);
assert($lastKey === 3);
譯者注:array_value_first()array_value_last() 并沒有通過 RFC 表決;因此 PHP 7.3 內(nèi)僅提供了 array_key_first() 以及 array_key_last() 函數(shù)。 
參考鏈接:https://wiki.php.net/rfc/arra...
Argon2 和 Hash 密碼加密性能增強

在PHP的早期版本中,我們增加了Argon2和哈希密碼加密算法,這是一種使用哈希加密算法來保護密碼的現(xiàn)代算法。它有三種不同的類型,Argon2i,Argon2d和Argon 2id。 我們針對Argon2i密碼散列和基于密碼的密鑰生成進行了優(yōu)化。 Argon2d性能更快,并使用依賴于內(nèi)存的數(shù)據(jù)訪問。 Argon2i使用與內(nèi)存無關(guān)的數(shù)據(jù)訪問。 Argon2id是Argon2i和Argon2d的混合體,使用依賴于數(shù)據(jù)和與數(shù)據(jù)獨立的存儲器訪問的組合。

password_hash():

Argon2id現(xiàn)在是在paswword_ *函數(shù)中使用的推薦的Argon2變量。

具有自定義成員方法的名稱的Argon2id與PASSWORD_ARGON2I的使用方法相同
password_hash("password",PASSWORD_ARGON2ID,["memory_cost"=> 1 << 17,"time_cost"=> 4,"threads"=> 2]);

password_verify();

除了Argon2i之外,password_verify()函數(shù)也適用于Argon2id。

password_needs_rehash();

此函數(shù)也將接受Argon2id哈希值,如果任何變量成員發(fā)生變化,則返回true。

$hash = password_hash("password", PASSWORD_ARGON2ID);
password_needs_rehash($hash, PASSWORD_ARGON2ID); // 返回假
password_needs_rehash($hash, PASSWORD_ARGON2ID, ["memory_cost" => 1<<17]); // 返回真
廢棄并移除 image2wbmp()

該函數(shù)能夠?qū)D像輸出為 WBMP 格式。另一個名為 imagewbmp() 的函數(shù)也同樣具備單色轉(zhuǎn)換的作用。因此,出于重復原因,image2wbmp()?現(xiàn)已被廢棄,你可使用 imagewbmp() 代替它。此函數(shù)被棄用后,再次調(diào)用它將會觸發(fā)已棄用警告。待后續(xù)此函數(shù)被移除后,再次調(diào)用它將會觸發(fā)致命錯誤。

廢棄并移除大小寫不敏感的常量

使用先前版本的 PHP,你可以同時使用大小寫敏感和大小寫不敏感的常量。但大小寫不敏感的常量會在使用中造成一點麻煩。所以,為了解決這個問題,PHP 7.3 廢棄了大小寫不敏感的常量。

原先的情況是:

類常量始終為「大小寫敏感」。

使用 const 關(guān)鍵字定義的全局常量始終為「大小寫敏感」。注意此處僅僅是常量自身的名稱,不包含命名空間名的部分,PHP 的命名空間始終為「大小寫不敏感」。

使用 define() 函數(shù)定義的常量默認為「大小寫敏感」。

使用 define() 函數(shù)并將第三個參數(shù)設(shè)為 true 定義的常量為「大小寫不敏感」。

如今 PHP 7.3 提議廢棄并移除以下用法:

In PHP 7.3: 廢棄使用 true 作為 define() 的第三個參數(shù)。

In PHP 7.3: 廢棄使用與定義時的大小寫不一致的名稱,訪問大小寫不敏感的常量。truefalse 以及 null 除外。

同站點 Cookie

PHP 7.3 在建議在使用 cookies 時,增加同站點標志。這個 RFC 會影響4個系統(tǒng)函數(shù)。

setcookie

setrawcookie

session_set_cookie_params

session_get_cookie_params

這個影響會在兩種情況下起作用。其中一種方式會添加函數(shù)的新參數(shù)
,另一種方式允許以數(shù)組形式的選項代替其他多帶帶選項。

bool setcookie(

???string $name

???[, string $value = ""

???[, int $expire = 0

???[, string $path = ""

???[, string $domain = ""

???[, bool $secure = false

???[, bool $httponly = false ]]]]]]

)

bool setcookie (

???string $name

???[, string $value = ""

???[, int $expire = 0

???[, array $options ]]]

)

// 兩種方式均可.
FPM 更新

FastCGI 進程管理器也進行了更新,現(xiàn)在提供了新的方式來記錄 FPM 日志。

log_limit:?設(shè)置允許的日志長度,可以超過 1024 字符。

log_buffering:?允許不需要額外緩沖去操作日志。

decorate _workers_output:?當啟用了 catch_workers_output 時,系統(tǒng)會去禁用渲染輸出。

改進 Windows 下的文件刪除

如官方文檔所述:

默認情況下,文件描述符以共享讀、寫、刪除的方式去操作。 這很有效的去映射 POSIX 并允許去刪除正在使用中的文件。但這并不是100%都是一樣的,不同的平臺可能仍存在一些差異。刪除操作之后,文件目錄仍存在直到所有的文件操作被關(guān)閉。

結(jié)束語

之前我們已經(jīng)講解了最新版本的 PHP7.3 的特點,包含了許多新增跟棄用的功能。這些功能都可以在 php.net 網(wǎng)站上找到,并且已經(jīng)合并到主分支上了。你現(xiàn)在就可以使用這些新功能部署在自己的服務(wù)器上,你也可以打開官方RFC頁面查閱每一個詳細版本。如果你對著新版 PHP7.3 有任何問題,你可以在評論下寫下自己的想法。
如果你喜歡這篇文章,并且覺得它很有幫助,你可以在 twitter 上關(guān)注我,來獲得更多的信息!

文章轉(zhuǎn)自:https://learnku.com/php/t/21549 

更多文章:https://learnku.com/laravel/c...

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

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

相關(guān)文章

  • 文看懂 PHP 7.3 更新

    摘要:目前依舊是其它腳本語言強勁的競爭對手,這主要歸功于其核心維護團隊的快速更新。有時我們在數(shù)組內(nèi)以及函數(shù)調(diào)用尤其是可變參函數(shù)時需要傳遞大量元素,若是漏掉一個逗號,便會報錯。在可變參函數(shù)例如內(nèi),更是如此。 showImg(https://segmentfault.com/img/remote/1460000017544573); PHP 目前依舊是其它腳本語言強勁的競爭對手,這主要歸功于其核...

    curlyCheng 評論0 收藏0
  • 文看懂 PHP 7.3 更新

    摘要:目前依舊是其它腳本語言強勁的競爭對手,這主要歸功于其核心維護團隊的快速更新。有時我們在數(shù)組內(nèi)以及函數(shù)調(diào)用尤其是可變參函數(shù)時需要傳遞大量元素,若是漏掉一個逗號,便會報錯。在可變參函數(shù)例如內(nèi),更是如此。 showImg(https://segmentfault.com/img/remote/1460000017544573); PHP 目前依舊是其它腳本語言強勁的競爭對手,這主要歸功于其核...

    Lsnsh 評論0 收藏0
  • PHP 7.3 我們將迎來靈活的 heredoc 和 nowdoc 句法結(jié)構(gòu)

    摘要:頻道已經(jīng)公布了的和語法更新,此次更新專注于代碼可讀性和有非常嚴格的語法,有些時候這令很多開發(fā)者避而遠之,因為他們在代碼中看起來非常丑陋,令代碼的可讀性降低。移除了這個約束和的背景從版本開始支持,他和的不同之處,僅是雙引號和單引號的差別。 showImg(https://segmentfault.com/img/remote/1460000014947632); php.net RFC ...

    twohappy 評論0 收藏0
  • CentOS 生產(chǎn)環(huán)境配置

    摘要:最新的已經(jīng)釋出,更新了,非常贊。不過目前尚未釋出,等待中。初始配置對于一般配置來說,不需要安裝倉庫,本文主要在于希望跟隨的配置流程,緊跟紅帽公司對于服務(wù)器的配置說明。 原文來自靜雅齋,轉(zhuǎn)載請注明出處。 生產(chǎn)環(huán)境和開發(fā)環(huán)境測試環(huán)境都不一樣,所以配置都不能隨意,對于大多數(shù)情況來說,RHEL 絕對是一個最佳選擇,除了最穩(wěn)定的內(nèi)核發(fā)布和最全的驅(qū)動支持,還能享受到 RHEL 10 年生命周期中 ...

    daydream 評論0 收藏0

發(fā)表評論

0條評論

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