2、PHP各版本特性

源文來自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 functionuse 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_limiterprivate综液,并且在讀取完畢會話數(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ù)來表明自己會同意或拒絕處理仑鸥。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吮播,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子眼俊,更是在濱河造成了極大的恐慌意狠,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疮胖,死亡現(xiàn)場離奇詭異环戈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)澎灸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門院塞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人性昭,你說我怎么就攤上這事迫悠。” “怎么了巩梢?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵创泄,是天一觀的道長。 經(jīng)常有香客問我括蝠,道長鞠抑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任忌警,我火速辦了婚禮搁拙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘法绵。我一直安慰自己箕速,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布朋譬。 她就那樣靜靜地躺著盐茎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徙赢。 梳的紋絲不亂的頭發(fā)上字柠,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天探越,我揣著相機(jī)與錄音,去河邊找鬼窑业。 笑死钦幔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的常柄。 我是一名探鬼主播鲤氢,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼西潘!你這毒婦竟也來了卷玉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤秸架,失蹤者是張志新(化名)和其女友劉穎揍庄,沒想到半個月后咆蒿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體东抹,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年沃测,在試婚紗的時候發(fā)現(xiàn)自己被綠了缭黔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒂破,死狀恐怖馏谨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情附迷,我是刑警寧澤惧互,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站喇伯,受9級特大地震影響喊儡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稻据,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一艾猜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捻悯,春花似錦匆赃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姓言,卻和暖如春埠居,著一層夾襖步出監(jiān)牢的瞬間查牌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工滥壕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留纸颜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓绎橘,卻偏偏與公主長得像胁孙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子称鳞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容