從 RFC 看看 PHP 7.3 會有什麼新玩意兒
最近有個習慣是看 PHP 的 RFC,偶爾會看到一些有趣的新功能,也為了未來的系統升級做一下準備。
如果你對 PHP 的 RFC 有興趣,可以看看這裡。
這篇文章中只介紹確定會在 PHP 7.3 中被引入的功能,對於正在提案中的、投票中的就暫時略過。
- 在函式呼叫時期允許參數末端的逗號(Allow a trailing comma in function calls )
以下操作目前是被允許的:
<?php
use Foo\Bar\{
Foo,
Bar,
};
$foo = [
'foo',
'bar',
];
以下操作目前是不被允許的,在此 RFC 通過後就可以使用:
<?php
unset(
$a,
$b,
$c,
);
然而目前以下操作在此 RFC 通過後,仍然不可以使用:
function bar($a, $b,) {
//
}
foo(,);
foo('function', 'bar',,);
foo(, 'function', 'bar');
- JSON_THROW_ON_ERROR
目前而言 json_decode()
如果失敗,會 return null;而 json_encode()
如果失敗,會 return false。如果要瞭解具體是什麼失敗,則要呼叫 json_last_error()
或 json_last_error_msg()
這個 RFC 提案加入一個 JsonException
,它繼承 Exception
,就像大部份的 PHP built-in 功能一樣,位於根命名空間下(\JsonException
)
它會拿來取代 json_last_error()
或 json_last_error_msg()
的作用,但這兩個函式依照慣例仍然會在核心保留一段時間。
- 遷移至 PCRE2(PCRE2 Migration)
PHP 有許多功能依賴於 PCRE(尤其是在正則表達式的部份),但目前 PHP 是依賴於 pcre 8.x 版本,這個版本已經不再加入新功能,僅做 bug fix。
所以在下一代會把這項依賴升級為 PCRE2,目前推測應該不會對現有功能造成影響,但若要升級到 PHP 7.3 且應用程式有使用正則表達式者,應該做一下測試以確定沒有問題。
- 在
list()
中使用參數傳遞( list() Reference Assignment)
通過此 RFC 後,可以使用下列的做法:
<?php
$array = [1, 2];
list($a, &$b) = $array;
[$a, &$b] = $array; // 這句的操作跟上一句的操作是等價的
var_dump($array);
// array(2) {
// [0]=>
// int(1)
// [1]=>
// &int(2)
//}
如果還是不太瞭解,下面的操作跟上面的例子是相同的(可執行於 PHP 7.1)
<?php
$array = [1, 2];
$a = $array[0];
$b =& $array[1];
is_countable()
函式
如果建立了一個類別且有實作 Countable
介面,則它可以被 foreach
循環取值。(最容易理解的例子就是 Laravel 的 collect()
)
以往,我們可能要用 is_array($collect) || $collect instanceof Countable
來確定是否可以被 foreach
循環取值(如果你不確定傳進來的是 Countable Class 還是一個陣列)
在此 RFC 下,我們可以簡化成 is_countable()
這個函式。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: