源文來自https://github.com/TIGERB/easy-tips遭铺,分享給大家 共同進(jìn)步
-
PHP 5.3.0 提供了廣泛的新特性:
添加了命名空間的支持.
添加了靜態(tài)晚綁定支持.
添加了跳標(biāo)簽支持.
添加了原生的閉包(Lambda/匿名函數(shù))支持.
新增了兩個魔術(shù)方法, __callStatic 和 __invoke.
添加了 Nowdoc 語法支持, 類似于 Heredoc 語法, 但是包含單引號.
使用 Heredoc 來初始化靜態(tài)變量和類屬性/常量變?yōu)榭赡?
可使用雙引號聲明 Heredoc, 補(bǔ)充了 Nowdoc 語法.
可在類外部使用 const 關(guān)鍵詞聲明 常量.
三元運算操作符有了簡寫形式: ?:.
HTTP 流包裹器將從 200 到 399 全部的狀態(tài)碼都視為成功。
動態(tài)訪問靜態(tài)方法變?yōu)榭赡?
異常可以被內(nèi)嵌.
新增了循環(huán)引用的垃圾回收器并且默認(rèn)是開啟的.
mail() 現(xiàn)在支持郵件發(fā)送日志. (注意: 僅支持通過該函數(shù)發(fā)送的郵件.)
-
PHP 5.4.0 提供了豐富的新特性:
新增支持 traits 。
新增短數(shù)組語法虐先,比如 $a = [1, 2, 3, 4]; 或 $a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4]; 。
新增支持對函數(shù)返回數(shù)組的成員訪問解析派敷,例如 foo()[0] 蛹批。
現(xiàn)在 閉包 支持 $this 。
現(xiàn)在不管是否設(shè)置 short_open_tag php.ini
選項篮愉,<?= 將總是可用腐芍。
新增在實例化時訪問類成員,例如: (new Foo)->bar() 试躏。
現(xiàn)在支持 Class::{expr}() 語法猪勇。
新增二進(jìn)制直接量,例如:0b001001101 冗酿。
改進(jìn)解析錯誤信息和不兼容參數(shù)的警告埠对。
SESSION 擴(kuò)展現(xiàn)在能追蹤文件的 上傳進(jìn)度 络断。
內(nèi)置用于開發(fā)的 CLI 模式的 web server 裁替。
- PHP 5.5.0 新的特性:
新增 Generators
Support for generators has been added via the yield keyword. Generators provide an easy way to implement simple iterators without the overhead or complexity of implementing a class that implements the Iterator interface.
A simple example that reimplements the range() function as a generator (at least for positive step values):
<?php
function xrange($start, $limit, $step = 1) {
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
}
echo 'Single digit odd numbers: ';/* 注意保存在內(nèi)存中的數(shù)組絕不會被創(chuàng)建或返回 */
foreach (xrange(1, 9, 2) as $number) {
echo "$number ";
}
?>
以上例程會輸出:
Single digit odd numbers: 1 3 5 7 9
新增 finally 關(guān)鍵字
try-catch blocks now support a finally block for code that should be run regardless of whether an exception has been thrown or not.
foreach 現(xiàn)在支持 list()
foreach 控制結(jié)構(gòu)現(xiàn)在支持通過 list() 構(gòu)造將嵌套數(shù)組分離到單獨的變量。例如:
<?
php$array = [
[1, 2],
[3, 4],
];
foreach ($array as list($a, $b)) {
echo "A: $a; B: $b\n";
}
?>
以上例程會輸出:
A: 1; B: 2A: 3; B: 4
關(guān)于 foreach 更深入的文檔可參考相關(guān)手冊頁面貌笨。
empty() 支持任意表達(dá)式
empty() 現(xiàn)在支持傳入一個任意表達(dá)式弱判,而不僅是一個變量。例如:
<?php
function always_false() {
return false;
}
if (empty(always_false())) {
echo 'This will be printed.';
}
if (empty(true)) {
echo 'This will not be printed.';
}
?>
以上例程會輸出:
This will be printed.
array and string literal dereferencing
Array and string literals can now be dereferenced directly to access individual elements and characters:
<?php
echo 'Array dereferencing: ';
echo [1, 2, 3][0];
echo "\n";
echo 'String dereferencing: ';
echo 'PHP'[0];echo "\n";
?>
以上例程會輸出:
Array dereferencing: 1String dereferencing: P
新的密碼哈希 API
A 新的密碼哈希 API that makes it easier to securely hash and manage passwords using the same underlying library as crypt() in PHP has been added. See the documentation for password_hash() for more detail.
Apache 2.4 handler supported on Windows
The Apache 2.4 handler SAPI is now supported on Windows.
改進(jìn) GD
對 GD 擴(kuò)展做了多方面的改進(jìn)锥惋,包括:
翻轉(zhuǎn)支持使用新的 imageflip() 函數(shù)昌腰。
高級裁剪支持使用 imagecrop() & imagecropauto() 函數(shù)开伏。
WebP 的讀寫分別支持使用 imagecreatefromwebp() & imagewebp() 。
-
PHP 5.6.0 新特性:
使用表達(dá)式定義常量
在之前的 PHP 版本中遭商, 必須使用靜態(tài)值來定義常量固灵,聲明屬性以及指定函數(shù)參數(shù)默認(rèn)值。 現(xiàn)在你可以使用包括數(shù)值劫流、字符串字面量以及其他常量在內(nèi)的數(shù)值表達(dá)式來 定義常量巫玻、聲明屬性以及設(shè)置函數(shù)參數(shù)默認(rèn)值。
<?php
const ONE = 1;
const TWO = ONE * 2;
class C {
const THREE = TWO + 1;
const ONE_THIRD = ONE / self::THREE;
const SENTENCE = 'The value of THREE is '.self::THREE;
public function f($a = ONE + self::THREE) {
return $a;
}
}
echo (new C)->f()."\n";
echo C::SENTENCE;
?>
以上例程會輸出:
4The value of THREE is 3
現(xiàn)在可以通過 const 關(guān)鍵字來定義類型為 array 的常量祠汇。
<?phpconst ARR = ['a', 'b'];echo ARR[0];?>
以上例程會輸出:
a
使用 ... 運算符定義變長參數(shù)函數(shù)
現(xiàn)在可以不依賴 func_get_args()仍秤, 使用 ... 運算符 來實現(xiàn) 變長參數(shù)函數(shù)。
<?php
function f($req, $opt = null, ...$params) { // $params 是一個包含了剩余參數(shù)的數(shù)組
printf('$req: %d; $opt: %d; number of params: %d'."\n",$req, $opt, count($params));
}
f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
?>
以上例程會輸出:
$req: 1;
$opt: 0;
number of params: 0$req: 1;
$opt: 2;
number of params: 0$req: 1;
$opt: 2;
number of params: 1$req: 1;
$opt: 2;
number of params: 2$req: 1;
$opt: 2;
number of params: 3
使用 ... 運算符進(jìn)行參數(shù)展開
在調(diào)用函數(shù)的時候可很,使用 ... 運算符诗力, 將 數(shù)組 和 可遍歷 對象展開為函數(shù)參數(shù)。 在其他編程語言我抠,比如 Ruby中苇本,這被稱為連接運算符,屿良。
<?php
function add($a, $b, $c) {
return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>
以上例程會輸出:
6
使用 **** 進(jìn)行冪運算
加入右連接運算符 **** 來進(jìn)行冪運算圈澈。 同時還支持簡寫的 **= 運算符,表示進(jìn)行冪運算并賦值尘惧。
<?php
printf("2 ** 3 == %d\n", 2 ** 3);
printf("2 ** 3 ** 2 == %d\n", 2 ** 3 ** 2);
$a = 2;$a **= 3;
printf("a == %d\n", $a);
?>
以上例程會輸出:
2 ** 3 == 82 ** 3 ** 2 == 512a == 8
use function 以及 use const
use 運算符 被進(jìn)行了擴(kuò)展以支持在類中導(dǎo)入外部的函數(shù)和常量康栈。 對應(yīng)的結(jié)構(gòu)為 use function 和 use const。
<?php
namespace Name\Space {
const FOO = 42;
function f() { echo __FUNCTION__."\n"; }
}
namespace {
use const Name\Space\FOO;
use function Name\Space\f;
echo FOO."\n";
f();
}
?>
以上例程會輸出:
42Name\Space\f
phpdbg
PHP 的 SAPI 模塊中實現(xiàn)了一個 交互式調(diào)試器喷橙,叫做 phpdbg啥么。更多信息,請訪問 ? phpdbg 文檔贰逾。
默認(rèn)字符編碼
對于一些字符編碼相關(guān)的函數(shù)悬荣,例如 htmlentities(), html_entity_decode() 以及 htmlspecialchars() 使用 default_charset 作為默認(rèn)字符集疙剑。請注意氯迂,對于 iconv(現(xiàn)已廢棄) 和 mbstring 相關(guān)的函數(shù), 如果分別設(shè)置了他們的編碼言缤, 那么這些對應(yīng)設(shè)置的優(yōu)先級高于 default_charset审残。
default_charset 的默認(rèn)值是 UTF-8述召。
php://input 是可重用的了
只要你需要,你可以多次打開并讀取 php://input。 同時幻工,這個特性使得在處理 POST 的數(shù)據(jù)的時候, 可以明顯降低對于內(nèi)存的需求量。
大文件上傳
現(xiàn)在可以支持大于 2GB 的文件上傳。
GMP 支持運算符重載
GMP 支持運算符重載守谓, 并且造型成數(shù)值類型。 這使得使用 GMP 的代碼更加直觀您单。
<?php
$a = gmp_init(42);
$b = gmp_init(17);
if (version_compare(PHP_VERSION, '5.6', '<')) {
echo gmp_intval(gmp_add($a, $b)), PHP_EOL;
echo gmp_intval(gmp_add($a, 17)), PHP_EOL;
echo gmp_intval(gmp_add(42, $b)), PHP_EOL;
} else {
echo $a + $b, PHP_EOL;
echo $a + 17, PHP_EOL;
echo 42 + $b, PHP_EOL;
}
?>
以上例程會輸出:
595959
使用 hash_equals() 比較字符串避免時序攻擊
加入 hash_equals() 函數(shù)斋荞, 以恒定的時間消耗來進(jìn)行字符串比較, 以避免時序攻擊虐秦。 比如當(dāng)比較 crypt() 密碼散列值的時候譬猫,就可以使用此函數(shù)。 (假定你不能使用 password_hash() 和 password_verify()羡疗, 這兩個函數(shù)也可以抵抗時序攻擊)
<?php
$expected = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('1234', '$2a$07$usesomesillystringforsalt$');
var_dump(hash_equals($expected, $correct));
var_dump(hash_equals($expected, $incorrect));
?>
以上例程會輸出:
bool(true)bool(false)
__debugInfo()
加入 __debugInfo()染服, 當(dāng)使用 var_dump() 輸出對象的時候, 可以用來控制要輸出的屬性和值叨恨。
<?php
class C {
private $prop;
public function __construct($val) {
$this->prop = $val;
}
public function __debugInfo() {
return [ 'propSquared' => $this->prop ** 2,];
}
}
var_dump(new C(42));
?>
以上例程會輸出:
object(C)#1 (1) { ["propSquared"]=> int(1764)}
gost-crypto 散列算法
加入 gost-crypto 散列算法柳刮。 它使用 ? RFC 4357, 11.2 小節(jié) 定義的 CryptoPro S-box 表實現(xiàn)了 GOST 散列函數(shù)。
SSL/TLS 提升
在 PHP 5.6 中對 SSL/TLS 的支持進(jìn)行了大幅度的提升痒钝。 這其中包括 默認(rèn)啟用端點驗證 選項來支持證書指紋比對秉颗, 以避免 TLS 重新協(xié)商攻擊。 還增加了很多 SSL 上下文選項送矩, 以便在使用加密流的時候蚕甥, 能夠更好的控制協(xié)議和驗證的相關(guān)設(shè)置。
這些變動在 PHP 5.6.x 中的 OpenSSL 變更 中有詳細(xì)描述栋荸。
pgsql 異步支持
pgsql 擴(kuò)展現(xiàn)在支持 異步方式連接數(shù)據(jù)庫及執(zhí)行查詢菇怀, 也即可以使用非阻塞的方式和 PostgreSQL 數(shù)據(jù)庫進(jìn)行交互。 使用 **PGSQL_CONNECT_ASYNC
** 常量可以 建立異步連接晌块,pg_connect_poll()爱沟, pg_socket(), pg_consume_input() 和 pg_flush() 函數(shù) 可以用來處理異步連接和查詢匆背。
- 7.0 新特性
標(biāo)量類型聲明
標(biāo)量類型聲明 有兩種模式: 強(qiáng)制 (默認(rèn)) 和 嚴(yán)格模式呼伸。 現(xiàn)在可以使用下列類型參數(shù)(無論用強(qiáng)制模式還是嚴(yán)格模式): 字符串(string), 整數(shù) (int), 浮點數(shù) (float), 以及布爾值 (bool)。它們擴(kuò)充了PHP5中引入的其他類型:類名钝尸,接口括享,數(shù)組和 回調(diào)類型。
要使用嚴(yán)格模式珍促,一個 declare 聲明指令必須放在文件的頂部铃辖。這意味著嚴(yán)格聲明標(biāo)量是基于文件可配的。 這個指令不僅影響參數(shù)的類型聲明踢星,也影響到函數(shù)的返回值聲明(參見 返回值類型聲明, 內(nèi)置的PHP函數(shù)以及擴(kuò)展中加載的PHP函數(shù))
完整的標(biāo)量類型聲明文檔和示例參見類型聲明章節(jié)澳叉。
返回值類型聲明
PHP 7 增加了對返回類型聲明的支持。 類似于參數(shù)類型聲明沐悦,返回類型聲明指明了函數(shù)返回值的類型成洗。可用的類型與參數(shù)聲明中可用的類型相同藏否。
完整的標(biāo)量類型聲明文檔和示例可參見 返回值類型聲明.
null合并運算符
由于日常使用中存在大量同時使用三元表達(dá)式和 isset()的情況瓶殃, 我們添加了null合并運算符 (??) 這個語法糖。如果變量存在且值不為**NULL
**副签, 它就會返回自身的值遥椿,否則返回它的第二個操作數(shù)。
太空船操作符(組合比較符)
太空船操作符用于比較兩個表達(dá)式淆储。當(dāng)$a小于冠场、等于或大于$b時它分別返回-1、0或1本砰。 比較的原則是沿用 PHP 的常規(guī)比較規(guī)則進(jìn)行的碴裙。
通過 define() 定義常量數(shù)組
Array 類型的常量現(xiàn)在可以通過 define() 來定義。在 PHP5.6 中僅能通過 const 定義点额。
<?phpdefine('ANIMALS', [ 'dog', 'cat', 'bird']);echo ANIMALS[1]; // 輸出 "cat"?>
匿名類
現(xiàn)在支持通過new class 來實例化一個匿名類舔株,這可以用來替代一些“用后即焚”的完整類定義。
詳細(xì)文檔可以參考 匿名類.
Unicode codepoint 轉(zhuǎn)譯語法
這接受一個以16進(jìn)制形式的 Unicode codepoint还棱,并打印出一個雙引號或heredoc包圍的 UTF-8 編碼格式的字符串载慈。 可以接受任何有效的 codepoint,并且開頭的 0 是可以省略的珍手。
Closure::call()
Closure::call() 現(xiàn)在有著更好的性能办铡,簡短干練的暫時綁定一個方法到對象上閉包并調(diào)用它。
為unserialize()提供過濾
這個特性旨在提供更安全的方式解包不可靠的數(shù)據(jù)琳要。它通過白名單的方式來防止?jié)撛诘拇a注入料扰。
IntlChar
新增加的 IntlChar 類旨在暴露出更多的 ICU 功能。這個類自身定義了許多靜態(tài)方法用于操作多字符集的 unicode 字符焙蹭。
若要使用此類晒杈,請先安裝Intl擴(kuò)展
預(yù)期
預(yù)期是向后兼用并增強(qiáng)之前的 assert() 的方法。 它使得在生產(chǎn)環(huán)境中啟用斷言為零成本孔厉,并且提供當(dāng)斷言失敗時拋出特定異常的能力拯钻。
老版本的API出于兼容目的將繼續(xù)被維護(hù),assert()現(xiàn)在是一個語言結(jié)構(gòu)撰豺,它允許第一個參數(shù)是一個表達(dá)式粪般,而不僅僅是一個待計算的 string或一個待測試的boolean。
關(guān)于這個特性的完整說明污桦,包括如何在開發(fā)和生產(chǎn)環(huán)境中配置它亩歹,可以在assert()的 expectations section章節(jié)找到。
Group use declarations
從同一 namespace 導(dǎo)入的類、函數(shù)和常量現(xiàn)在可以通過單個 use 語句 一次性導(dǎo)入了小作。
生成器可以返回表達(dá)式
此特性基于 PHP 5.5 版本中引入的生成器特性構(gòu)建的亭姥。 它允許在生成器函數(shù)中通過使用 return 語法來返回一個表達(dá)式 (但是不允許返回引用值), 可以通過調(diào)用 Generator::getReturn() 方法來獲取生成器的返回值顾稀, 但是這個方法只能在生成器完成產(chǎn)生工作以后調(diào)用一次达罗。
在生成器中能夠返回最終的值是一個非常便利的特性, 因為它使得調(diào)用生成器的客戶端代碼可以直接得到生成器(或者其他協(xié)同計算)的返回值静秆, 相對于之前版本中客戶端代碼必須先檢查生成器是否產(chǎn)生了最終的值然后再進(jìn)行響應(yīng)處理 來得方便多了粮揉。
Generator delegation
現(xiàn)在,只需在最外層生成其中使用 yield from抚笔, 就可以把一個生成器自動委派給其他的生成器扶认, Traversable 對象或者 array。
整數(shù)除法函數(shù) intdiv()
新加的函數(shù) intdiv() 用來進(jìn)行 整數(shù)的除法運算殊橙。
會話選項
session_start() 可以接受一個 array 作為參數(shù)蝠引, 用來覆蓋 php.ini 文件中設(shè)置的 會話配置選項。
在調(diào)用 session_start() 的時候蛀柴, 傳入的選項參數(shù)中也支持 session.lazy_write 行為螃概, 默認(rèn)情況下這個配置項是打開的。它的作用是控制 PHP 只有在會話中的數(shù)據(jù)發(fā)生變化的時候才 寫入會話存儲文件鸽疾,如果會話中的數(shù)據(jù)沒有發(fā)生改變吊洼,那么 PHP 會在讀取完會話數(shù)據(jù)之后, 立即關(guān)閉會話存儲文件制肮,不做任何修改冒窍,可以通過設(shè)置 read_and_close 來實現(xiàn)。
例如豺鼻,下列代碼設(shè)置 session.cache_limiter 為 private综液,并且在讀取完畢會話數(shù)據(jù)之后馬上關(guān)閉會話存儲文件。
<?php
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>
preg_replace_callback_array()
在 PHP 7 之前儒飒,當(dāng)使用 preg_replace_callback() 函數(shù)的時候谬莹, 由于針對每個正則表達(dá)式都要執(zhí)行回調(diào)函數(shù),可能導(dǎo)致過多的分支代碼桩了。 而使用新加的 preg_replace_callback_array() 函數(shù)附帽, 可以使得代碼更加簡潔。
現(xiàn)在井誉,可以使用一個關(guān)聯(lián)數(shù)組來對每個正則表達(dá)式注冊回調(diào)函數(shù)蕉扮, 正則表達(dá)式本身作為關(guān)聯(lián)數(shù)組的鍵, 而對應(yīng)的回調(diào)函數(shù)就是關(guān)聯(lián)數(shù)組的值颗圣。
CSPRNG Functions
新加入兩個跨平臺的函數(shù): random_bytes() 和 random_int() 用來產(chǎn)生高安全級別的隨機(jī)字符串和隨機(jī)整數(shù)喳钟。
可以使用 list() 函數(shù)來展開實現(xiàn)了 ArrayAccess 接口的對象
在之前版本中屁使,list() 函數(shù)不能保證 正確的展開實現(xiàn)了 ArrayAccess 接口的對象, 現(xiàn)在這個問題已經(jīng)被修復(fù)奔则。
其他特性
允許在克隆表達(dá)式上訪問對象成員蛮寂,例如: (clone $foo)->bar()。
- 7.1 新特性:
可為空(Nullable)類型
類型現(xiàn)在允許為空应狱,當(dāng)啟用這個特性時,傳入的參數(shù)或者函數(shù)返回的結(jié)果要么是給定的類型祠丝,要么是 null 疾呻。可以通過在類型前面加上一個問號來使之成為可為空的写半。
<?php
function test(?string $name){
var_dump($name);
}
test('tpunt');
test(null);
test();
以上例程會輸出:
string(5) "tpunt"NULLUncaught Error: Too few arguments to function test(), 0 passed in...
Void 函數(shù)
在PHP 7 中引入的其他返回值類型的基礎(chǔ)上岸蜗,一個新的返回值類型void被引入。 返回值聲明為 void 類型的方法要么干脆省去 return 語句叠蝇,要么使用一個空的 return 語句璃岳。 對于 void 函數(shù)來說,null 不是一個合法的返回值悔捶。
<?php
function swap(&$left, &$right) : void{
if ($left === $right) { return; }
$tmp = $left;
$left = $right;
$right = $tmp;}
$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);
以上例程會輸出:
null
int(2)
int(1)
試圖去獲取一個 void 方法的返回值會得到 null 铃慷,并且不會產(chǎn)生任何警告。這么做的原因是不想影響更高層次的方法蜕该。
Symmetric array destructuring
短數(shù)組語法([])現(xiàn)在可以用于將數(shù)組的值賦給一些變量(包括在foreach中)犁柜。 這種方式使從數(shù)組中提取值變得更為容易。
<?php
$data = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Fred'],
];
while (['id' => $id, 'name' => $name] = $data) {
// logic here with $id and $name
}
類常量可見性
現(xiàn)在起支持設(shè)置類常量的可見性堂淡。
<?php
class ConstDemo{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
iterable 偽類
現(xiàn)在引入了一個新的被稱為iterable的偽類 (與callable類似)馋缅。 這可以被用在參數(shù)或者返回值類型中,它代表接受數(shù)組或者實現(xiàn)了Traversable接口的對象绢淀。 至于子類萤悴,當(dāng)用作參數(shù)時,子類可以收緊父類的iterable類型到array 或一個實現(xiàn)了Traversable的對象皆的。對于返回值覆履,子類可以拓寬父類的 array或?qū)ο蠓祷刂殿愋偷絠terable。
<?php
function iterator(iterable $iter){
foreach ($iter as $val) {
//
}
}
多異常捕獲處理
一個catch語句塊現(xiàn)在可以通過管道字符(|)來實現(xiàn)多個異常的捕獲费薄。 這對于需要同時處理來自不同類的不同異常時很有用内狗。
<?php
try {
// some code
} catch (FirstException | SecondException $e) {
// handle first and second exceptions
}
list()現(xiàn)在支持鍵名
現(xiàn)在list()支持在它內(nèi)部去指定鍵名。這意味著它可以將任意類型的數(shù)組 都賦值給一些變量(與短數(shù)組語法類似)
<?php
$data = [
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Fred'],
];
while (list('id' => $id, 'name' => $name) = $data) {
// logic here with $id and $name
}
支持為負(fù)的字符串偏移量
現(xiàn)在所有支持偏移量的字符串操作函數(shù) 都支持接受負(fù)數(shù)作為偏移量义锥,包括通過[]或{}操作字符串下標(biāo)柳沙。在這種情況下,一個負(fù)數(shù)的偏移量會被理解為一個從字符串結(jié)尾開始的偏移量拌倍。
<?php
var_dump("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));
以上例程會輸出:
string (1) "e"int(3)
Negative string and array offsets are now also supported in the simple variable parsing syntax inside of strings.
<?php
$string = 'bar';
echo "The last character of '$string' is '$string[-1]'.\n";
?>
以上例程會輸出:
The last character of 'bar' is 'r'.
ext/openssl 支持 AEAD
通過給openssl_encrypt()和openssl_decrypt() 添加額外參數(shù)赂鲤,現(xiàn)在支持了AEAD (模式 GCM and CCM)噪径。
通過 Closure::fromCallable() 將callables轉(zhuǎn)為閉包
Closure新增了一個靜態(tài)方法,用于將callable快速地 轉(zhuǎn)為一個Closure 對象数初。
<?php
class Test{
public function exposeFunction() {
return Closure::fromCallable([$this, 'privateFunction']);
}
private function privateFunction($param) {
var_dump($param);
}
}
$privFunc = (new Test)->exposeFunction();
$privFunc('some value');
以上例程會輸出:
string(10) "some value"
異步信號處理
一個新的名為 pcntl_async_signals() 的方法現(xiàn)在被引入找爱, 用于啟用無需 ticks (這會帶來很多額外的開銷)的異步信號處理。
<?php
pcntl_async_signals(true); // turn on async signals
pcntl_signal(SIGHUP, function($sig) {
echo "SIGHUP\n";
});
posix_kill(posix_getpid(), SIGHUP);
以上例程會輸出:
SIGHUP
HTTP/2 server push support in ext/curl
對服務(wù)器推送的支持現(xiàn)在已經(jīng)被加入到 CURL 擴(kuò)展中( 需要版本 7.46 或更高)泡孩。這個可以通過 curl_multi_setopt() 函數(shù)與新的常量 **CURLMOPT_PUSHFUNCTION
** 來進(jìn)行調(diào)節(jié)车摄。常量 **CURL_PUST_OK
** 和 **CURL_PUSH_DENY
** 也已經(jīng)被添加進(jìn)來,以便服務(wù)器推送的回調(diào)函數(shù)來表明自己會同意或拒絕處理仑鸥。