php7的新特徵

2021-09-09 09:11:49 字數 3650 閱讀 8826

1、函式的行參型別可以是標量,在 php 5 中只能是類名、介面、array 或者 callable (php 5.4,即可以是函式,包括匿名函式),現在也可以使用 string、int、float和 bool 了。標量的模式有強制模式和嚴格模式兩種,

模式宣告:declare(strict_types=1);  預設情況值為0,值為1代表為嚴格校驗的模式 

強制模式:

嚴格模式:

很明顯上面同樣的**設定不同的模式會有不同的效果,嚴格模式必須按照指定的型別傳值,不然會報錯。

2、返回值型別宣告:

下面這個宣告的返回值是陣列,則只能返回陣列加入返回其他型別就會報錯

3、null合併運算子??

null 合併運算子使得變數存在且值不為null, 它就會返回自身的值,否則返回它的第二個運算元。

上面的當$a=null或$a不存在時返回『不存在』,其他都返回$a的值;

4、太空船操作符(組合比較符)

太空船操作符用於比較兩個表示式。當$a大於、等於或小於$b時它分別返回-1、0或1。

<?php 

// 整型

echo 1 <=> 1; // 0

echo 1 <=> 2; // -1

echo 2 <=> 1; // 1

// 浮點型

echo 1.5 <=> 1.5; // 0

echo 1.5 <=> 2.5; // -1

echo 2.5 <=> 1.5; // 1

// 字串

echo "a" <=> "a"; // 0

echo "a" <=> "b"; // -1

echo "b" <=> "a"; // 1

?>

5、通過define()定義常量陣列

輸出 "cat" 

6、匿名類:

<?php

//php7以前 介面實現

inte***ce user

class vipuser implements user

}class goods

}$display = new goods();

//常規例項化介面實現物件

$display ->getuserdata(new vipuser);//商品**:120

<?php

//php7 建立乙個匿名的物件

inte***ce user

class goods

}$display = new goods();

//new匿名物件實現user介面

$display ->getuserdata(new class implements user

});//商品**:120

7、為unserialize()提供過濾

這個特性旨在提供更安全的方式解包不可靠的資料。它通過白名單的方式來防止潛在的**注入。

<?php

// 轉換物件為 __php_incomplete_class 物件

$data = unserialize($foo, ["allowed_classes" => false]);

// 轉換物件為 __php_incomplete_class 物件,除了 myclass 和 myclass2

$data = unserialize($foo, ["allowed_classes" => ["myclass", "myclass2"]);

// 預設接受所有類

$data = unserialize($foo, ["allowed_classes" => true]);

8、intlchar

新增加的 intlchar 類旨在暴露出更多的 icu 功能。這個類自身定義了許多靜態方法用於操作多字符集的 unicode 字元。

<?php

printf('%x', intlchar::codepoint_max);

echo intlchar::charname('@');

var_dump(intlchar::ispunct('!'));

以上例項會輸出:

10ffff

commercial at

bool(true)

若要使用此類,請先安裝intl擴充套件

9、預期

預期是向後兼用並增強之前的 assert() 的方法。 它使得在生產環境中啟用斷言為零成本,並且提供當斷言失敗時丟擲特定異常的能力。

<?php

ini_set('assert.exception', 1);

class customerror extends assertionerror {}

assert(false, new customerror('some error message'));

?>

以上例項會輸出:

fatal error: uncaught customerror: some error message

10、use 加強

從同一 namespace 匯入的類、函式和常量現在可以通過單個 use 語句 一次性匯入了。

<?php

//  php 7 之前版本用法

use some\namespace\classa;

use some\namespace\classb;

use some\namespace\classc as c;

use function some\namespace\fn_a;

use function some\namespace\fn_b;

use function some\namespace\fn_c;

use const some\namespace\consta;

use const some\namespace\constb;

use const some\namespace\constc;

// php 7+ 用法

use some\namespace\;

use function some\namespace\;

use const some\namespace\;

?>

11、generator 加強

增強了generator的功能,這個可以實現很多先進的特性

<?php

<?php

function gen()

function gen2()

foreach (gen() as $val)

以上例項會輸出:12

3412、整除

新增了整除函式 intdiv(),使用例項:

echo intdiv(10, 3);//3

PHP 7 的新特徵

我們知道php是一種弱型別的程式語言,因此沒有提供任何方法來指定輸入引數和返回值的型別,php7突破了這種現狀,增加了對標量型別 int,float,string,bool 的宣告支援,增加declare strict types 1 指令宣告是否嚴格型別校驗,我們來看一段 declare stri...

php7的新特性

截止到目前為止,php官方已經發布了php7的rc5版本,預計在11月份左右會發布第乙個正式版本!現在來說php7的重大特性肯定已經是定型了,不會再有什麼變動了。後續一些版本的迭代主要也就是修修bug,優化之類的。下面就來說話我們一直期待的php7.0新特徵吧。1.標量引數型別宣告 現在支援字串 s...

PHP7的新特性

php7 從發布到現在已經有快三年的時間了,現在已經發展到 php7.2.9 版本了。它的發布給 php 帶來了很大的效能提公升,這主要是得益於 php 對 zend 引擎的深度優化,同時還降低了 php 對系統的資源占用。主要的變化有以下幾點 在php之前的版本中,php 在語法解析階段直接生成了...