搜尋
首頁後端開發PHP7總結PHP 7.x 各版本的新特性

總結PHP 7.x 各版本的新特性

推薦(免費):PHP7

PHP 7.x 各個版本的新特性

前言

上個月同事看見我寫

$a = $a ?? '';

問我這個寫法是什麼,還有這樣的寫法?我說這是PHP7以上才有的寫法,你不知道嗎?他說不知道。

心裡嘀咕了一下,打算開始寫這篇部落格。

PHP7 應該是除了基礎之外,是一種現在的 PHP 。因為在PHP7 出現了,強型別定義,和一些語法上的寫法,如 組合比較符, define() 可以定義數組等一些特性。以下開始正式介紹,從PHP7.0 開始介紹,之後又出了新版本,也會在下面陸陸續續加上。
好了,我們開始

PHP 7.0

#標量型別宣告

##什麼是標量型別?

四種標量類型:

boolean (布林型)
integer (整數)
float (浮點型, 也稱為double)
string (字符字串)
兩種複合型別:
array (數組)
object (物件)
資源是一種特殊變量,保存了到外部資源的一個參考。資源是透過專門的函數來建立和使用的。資源類型變數為開啟檔案、資料庫連線、圖形畫布區域等的特殊句柄。
說的通俗一點,標量類型,就是定義變數的一個資料型態。

在php5中,有類別名,接口,陣列 和回呼函數。在php中,增加了 符字串(string), 整數 (int), 浮點數 (float), 以及布林值 (bool)。下面我們來舉例子,萬事萬物看例子

function typeInt(int $a){
    echo $a;}typeInt('sad');// 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given
在這裡,我們定義了$a 必須為int類型,如果 type 函數裡面傳了string 所以報錯。讓我們修改上述的程式碼就沒錯了

function typeString(string $a){
    echo $a;}typeString('sad'); //sad

傳回值類型宣告

關於函數的方法回傳值可以定義,例如我某個函數必須要回傳int 類型,他就定死來回傳int ,如果你回傳string 則報錯。如下

<?phpfunction  returnArray(): array{

    return [1, 2, 3, 4];}print_r(returnArray());/*Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
*/
那當我們的定義了數組,回傳了string或其他型別呢?

那麼他將會

報錯 例如

function returnErrorArray(): array
{

    return '1456546';
}

print_r(returnErrorArray());
/*
Array
Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in 
*/

null 合併運算子

由於日常使用中存在大量同時使用三元表達式和isset()的情況, 我們加入了null合併運算子(??) 這個語法糖。如果變數存在且值不為NULL, 它就會傳回自身的值,否則傳回它的第二個運算元。

<?php $username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
//这两个是等效的  当不存在user 则返回?? 后面的参数

$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;

?>

太空船運算子

// 整数echo 1  1; // 0 当左边等于右边的时候,返回0echo 1  2; // -1  当左边小于右边,返回-1echo 2  1; // 1  当左边大于右边,返回1// 浮点数echo 1.5  1.5; // 0echo 1.5  2.5; // -1echo 2.5  1.5; // 1
 // 字符串echo "a"  "a"; // 0echo "a"  "b"; // -1echo "b"  "a"; // 1

#define 定義陣列

在PHP7 先前的版本define 是不能夠定義數組的現在是可以的例如

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // 输出 "cat"

use 方法批次導入

// 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\{ClassA, ClassB, ClassC as C};use function some\namespace\{fn_a, fn_b, fn_c};use const some\namespace\{ConstA, ConstB, ConstC};

Unicode codepoint 轉譯語法

echo "\u{aa}"; //ªecho "\u{0000aa}";  //ª  echo "\u{9999}"; //香

#匿名類別

<?phpinterface  Logger {
    public function log(string $msg);}class Application {
    private $logger;

    public function getLogger(): Logger {
         return $this->logger;
    }

    public function setLogger(Logger $logger) {
         $this->logger = $logger;
    }}$app = new Application;$app->setLogger(new class implements Logger {  //这里就是匿名类
    public function log(string $msg) {
        echo $msg;
    }});

PHP 7.1

#可為空類型

參數以及傳回值的類型現在可以透過在類型前加上一個問號使之允許為空。當啟用這個特性時,傳入的參數或函數傳回的結果要不是給定的類型,就是 null 。

<?phpfunction  testReturn(): ?string{
    return &#39;elePHPant&#39;;}var_dump(testReturn()); //string(10) "elePHPant"function testReturn(): ?string{
    return null;}var_dump(testReturn()); //NULLfunction test(?string $name){
    var_dump($name);}test(&#39;elePHPant&#39;); //string(10) "elePHPant"test(null); //NULLtest(); //Uncaught Error: Too few arguments to function test(), 0 passed in...

void

增加了一個返回void的類型,例如

<?phpfunction  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);

多重異常捕獲處理

#這個功能還是比較常用的,在日常開發之中

<?php try {
    // some code
} catch (FirstException | SecondException $e) {  //用 | 来捕获FirstException异常,或者SecondException 异常
  
}

PHP 7.2

PHP7.2是PHP7系列最少的新特性了


允許分組命名空間的尾部逗號

#

<?phpuse  Foo\Bar\{
    Foo,
    Bar,
    Baz,};
允許重寫抽象方法

<?phpabstract  class A{
    abstract function test(string $s);}abstract class B extends A{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;}
新的物件類型

<?phpfunction  test(object $obj) : object  //这里 可以输入对象{
    return new SplQueue();}test(new StdClass());
PHP 7.3

PHP7.3 在文法層面沒有什麼很大的改變。

PHP 7.4

類別屬性支援類型宣告

恭喜PHP 往強型別又邁了一步

<?phpclass  User {
    public int $id;
    public string $name;}?>
箭頭函數

箭頭函數提供了用於使用隱式按值作用域綁定定義函數的簡寫語法。與 JS 的箭頭函數差不多,不過要帶個 fn。吐槽一波

<?php $factor = 10;$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);// $nums = array(10, 20, 30, 40);?>
Null 合併運算子支援方法###
<?php $array[&#39;key&#39;] ??= computeDefault();// 类似与这个if (!isset($array[&#39;key&#39;])) {
    $array[&#39;key&#39;] = computeDefault();}?>

以上是總結PHP 7.x 各版本的新特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。