現在可以在 PHP 先前需要靜態值的地方(例如常數和屬性宣告以及預設函式引數)提供涉及數字和字串字面值及/或常數的純量運算式。
<?php
const ONE = 1;
const TWO = ONE * 2;
class C {
const THREE = TWO + 1;
const ONE_THIRD = ONE / self::THREE;
const SENTENCE = 'THREE 的值是 '.self::THREE;
public function f($a = ONE + self::THREE) {
return $a;
}
}
echo (new C)->f()."\n";
echo C::SENTENCE;
?>
上述範例將輸出
4 The value of THREE is 3
現在也可以使用 const
關鍵字定義常數 陣列
<?php
const ARR = ['a', 'b'];
echo ARR[0];
?>
上述範例將輸出
a
...
的可變參數函式
可變參數函式 現在可以使用 ...
運算子來實作,而不需依賴 func_get_args()。
<?php
function f($req, $opt = null, ...$params) {
// $params 是一個包含其餘參數的陣列。
printf('$req: %d; $opt: %d; 參數數量: %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
...
展開參數
呼叫函式時,可以使用 ...
運算子將陣列和 Traversable 物件展開到參數列表中。這在其他語言(包括 Ruby)中也稱為 splat 運算子。
<?php
function add($a, $b, $c) {
return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>
上述範例將輸出
6
**
進行指數運算新增了右結合 **
運算子以支援指數運算,以及 **=
簡寫賦值運算子。
<?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 == 8 2 ** 3 ** 2 == 512 a == 8
use
運算子已擴展,除了類別之外,現在也支援導入函式和常數。這分別是透過 `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();
}
?>
上述範例將輸出
42 Name\Space\f
PHP 現在包含一個名為 phpdbg 的互動式除錯器,它以 SAPI 模組的形式實作。更多資訊,請參閱 phpdbg 文件。
default_charset 現在被用作 htmlentities()、html_entity_decode() 和 htmlspecialchars() 函式的預設字元集。請注意,如果設定了(現在已棄用)的 iconv 和 mbstring 編碼設定,它們將分別優先於 iconv 和 mbstring 函式的 default_charset。
此設定的預設值為 UTF-8
。
php://input
可重複使用
php://input
現在可以根據需要重新開啟和讀取多次。這項工作還大幅減少了處理 POST 資料所需的記憶體量。
現在接受大於 2 GB 的檔案。
GMP 物件現在支援運算子多載和轉換為純量類型。這允許使用 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;
}
?>
上述範例將輸出
59 59 59
hash_equals() 函式已被加入用於以固定時間比較兩個字串。這應該用於減輕計時攻擊;例如,在測試 crypt() 密碼雜湊值時(假設您無法使用 password_hash() 和 password_verify(),它們不易受計時攻擊的影響)。
<?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(),允許物件在使用 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
雜湊演算法。它使用 CryptoPro S-box 表實現了 GOST 雜湊函數,詳見 » RFC 4357,第 11.2 節。
PHP 5.6 對 SSL/TLS 支援進行了廣泛的改進。這些改進包括預設啟用 peer 驗證、支援憑證指紋比對、降低 TLS 重新協商攻擊的風險,以及許多新的 SSL 內容選項,以便在使用加密串流時,能更精細地控制協定和驗證設定。
本遷移指南的 PHP 5.6.x 中的 OpenSSL 變更 章節更詳細地描述了這些變更。
pgsql 擴充套件現在支援非同步連線和查詢,從而在與 PostgreSQL 資料庫互動時啟用非阻塞行為。可以使用常數 PGSQL_CONNECT_ASYNC
建立非同步連線,並使用新的函數 pg_connect_poll()、pg_socket()、pg_consume_input() 和 pg_flush() 來處理非同步連線和查詢。