php7函式,宣告,返回值等新特性介紹

2022-03-02 16:25:15 字數 3482 閱讀 8540

使用 ... 運算子定義變長引數函式 (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() 輸出物件的時候, 可以用來控制要輸出的屬性和值。

classc  

public

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 在語法解析階段直接生成了...