使用 ... 運算子定義變長引數函式 (php 5 >= 5.6.0, php 7)
現在可以不依賴 func_get_args(), 使用 ... 運算子 來實現 變長引數函式。
function f($req, $opt = null, ...$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
使用 ... 運算子進行引數展開 (php 5 >= 5.6.0, php 7)
在呼叫函式的時候,使用 ... 運算子, 將 陣列 和 可遍歷 物件展開為函式引數。 在其他程式語言,比如 ruby中,這被稱為連線運算子,。
function add($a, $b, $c) $operators = [2, 3];
echo add(1, ...$operators);
以上例程會輸出:
use function 以及 use const (php 5 >= 5.6.0, php 7)
use 運算子 被進行了擴充套件以支援在類中匯入外部的函式和常量。 對應的結構為 use function 和 use const。
namespace name\space}namespace
以上例程會輸出:
name\space\f
debuginfo() (php 5 >= 5.6.0, php 7)
加入 debuginfo(), 當使用 var_dump() 輸出物件的時候, 可以用來控制要輸出的屬性和值。
classcpublic
function
debuginfo()
}var_dump(new c(42));
以上例程會輸出:
object(c)#1 (1)
標量型別宣告 (php 7)
標量型別宣告 有兩種模式: 強制 (預設) 和 嚴格模式。 現在可以使用下列型別引數(無論用強制模式還是嚴格模式): 字串(string), 整數 (int), 浮點數 (float), 以及布林值 (bool)。它們擴充了php5中引入的其他型別:類名,介面,陣列和 **型別。
//coercive mode
function sumofints(int ...$ints
)var_dump(sumofints(2, '3', 4.1));
以上例程會輸出:
int(9)
要使用嚴格模式,乙個 declare 宣告指令必須放在檔案的頂部。這意味著嚴格宣告標量是基於檔案可配的。 這個指令不僅影響引數的型別宣告,也影響到函式的返回值宣告(參見返回值型別宣告, 內建的php函式以及擴充套件中載入的php函式)
返回值型別宣告 (php 7)
php 7 增加了對返回型別宣告的支援。 類似於引數型別宣告,返回型別宣告指明了函式返回值的型別。可用的型別與引數宣告中可用的型別相同。
function arrayssum(array ...$arrays): array, $arrays);}
print_r(arrayssum([1,2,3], [4,5,6], [7,8,9]));
以上例程會輸出:
array
(
[0] => 6
[1] => 15
[2] => 24
)
null合併運算子 (php 7)
由於日常使用中存在大量同時使用三元表示式和 isset()的情況, 我們新增了null合併運算子 (??) 這個語法糖。如果變數存在且值不為null, 它就會返回自身的值,否則返回它的第二個運算元。
//fetches the value of $_get['user'] and returns 'nobody'
// if it does not exist.
$username = $_get['user'] ?? 'nobody';
//this is equivalent to:
$username = isset($_get['user']) ? $_get['user'] : 'nobody';
//coalesces can be chained: this will return the first
// defined value out of $_get['user'], $_post['user'], and
// 'nobody'.
$username = $_get['user'] ?? $_post['user'] ?? 'nobody';
太空船操作符(組合比較符)(php 7)
太空船操作符用於比較兩個表示式。當$a小於、等於或大於$b時它分別返回-1、0或1。 比較的原則是沿用 php 的常規比較規則進行的。
//integers
echo 1 <=> 1; //
0echo 1 <=> 2; //
-1echo 2 <=> 1; //
1// floats
echo 1.5 <=> 1.5; //
0echo 1.5 <=> 2.5; //
-1echo 2.5 <=> 1.5; //
1// strings
echo "a" <=> "a"; //
0echo "a" <=> "b"; //
-1echo "b" <=> "a"; //
1
通過 define() 定義常量陣列 (php 7)
array 型別的常量現在可以通過 define() 來定義。在 php5.6 中僅能通過 const 定義。
define('animals',['dog',
'cat',
'bird']);
echo animals[1]; //
outputs "cat"
php7的新特性
截止到目前為止,php官方已經發布了php7的rc5版本,預計在11月份左右會發布第乙個正式版本!現在來說php7的重大特性肯定已經是定型了,不會再有什麼變動了。後續一些版本的迭代主要也就是修修bug,優化之類的。下面就來說話我們一直期待的php7.0新特徵吧。1.標量引數型別宣告 現在支援字串 s...
PHP7 常用新特性
1.標量型別宣告 php是一種弱型別的程式語言,因此沒有提供任何方法來指定輸入引數和返回值的型別,php7突破了這種現狀,增加了對標量型別 int,float,string,bool 的宣告支援,增加declare strict types 1 指令宣告是否嚴格型別校驗,來看一段 declare s...
PHP7的新特性
php7 從發布到現在已經有快三年的時間了,現在已經發展到 php7.2.9 版本了。它的發布給 php 帶來了很大的效能提公升,這主要是得益於 php 對 zend 引擎的深度優化,同時還降低了 php 對系統的資源占用。主要的變化有以下幾點 在php之前的版本中,php 在語法解析階段直接生成了...