国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 7 的幾個新特性

linkFly / 1742人閱讀

摘要:使用返回值類型聲明時,如果沒有聲明為嚴格模式,如果返回值不是預期的類型,還是會對其進行強制類型轉換。生成器的兩個新特性和可以組合。

1. ?? 運算符(NULL 合并運算符)

把這個放在第一個說是因為我覺得它很有用。用法:

$a = $_GET["a"] ?? 1;

它相當于:


我們知道三元運算符是可以這樣用的:

$a ?: 1

但是這是建立在 $a 已經定義了的前提上。新增的 ?? 運算符可以簡化判斷。

2. 函數返回值類型聲明

官方文檔提供的例子(注意 ... 的邊長參數語法在 PHP 5.6 以上的版本中才有):


從這個例子中可以看出現在函數(包括匿名函數)都可以指定返回值的類型。

這種聲明的寫法有些類似于 swift:

func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

這個特性可以幫助我們避免一些 PHP 的隱式類型轉換帶來的問題。在定義一個函數之前就想好預期的結果可以避免一些不必要的錯誤。

不過這里也有一個特點需要注意。PHP 7 增加了一個 declare 指令:strict_types,既使用嚴格模式。

使用返回值類型聲明時,如果沒有聲明為嚴格模式,如果返回值不是預期的類型,PHP 還是會對其進行強制類型轉換。但是如果是嚴格模式, 則會出發一個 TypeError 的 Fatal error。

強制模式:


以上代碼可以正常執行,foo 函數返回 int 1,沒有任何錯誤。

嚴格模式:


在聲明之后,就會觸發致命錯誤。

是不是有點類似與 js 的 strict mode?

3. 標量類型聲明

PHP 7 中的函數的形參類型聲明可以是標量了。在 PHP 5 中只能是類名、接口、array 或者 callable (PHP 5.4,即可以是函數,包括匿名函數),現在也可以使用 stringintfloatbool 了。

官方示例:


需要注意的是上文提到的嚴格模式的問題在這里同樣適用:強制模式(默認,既強制類型轉換)下還是會對不符合預期的參數進行強制類型轉換,嚴格模式下則觸發 TypeError 的致命錯誤。

4. use 批量聲明

PHP 7 中 use 可以在一句話中聲明多個類或函數或 const 了:


但還是要寫出每個類或函數或 const 的名稱(并沒有像 python 一樣的 from some import * 的方法)。

需要留意的問題是:如果你使用的是基于 composer 和 PSR-4 的框架,這種寫法是否能成功的加載類文件?其實是可以的,composer 注冊的自動加載方法是在類被調用的時候根據類的命名空間去查找位置,這種寫法對其沒有影響。

5. 其他的特性

其他的一些特性我就不一一介紹了,有興趣可以查看官方文檔:

http://php.net/manual/en/migration70.new-features.php

簡要說幾個:

PHP 5.3 開始有了匿名函數,現在又有了匿名類了;

define 現在可以定義常量數組;

閉包(?Closure)增加了一個 call 方法;

生成器(或者叫迭代器更合適)可以有一個最終返回值(return),也可以通過 yield from 的新語法進入一個另外一個生成器中(生成器委托)。

生成器的兩個新特性(return 和 yield from)可以組合。具體的表象大家可以自行測試。PHP 7 現在已經到 RC5 了,最終的版本應該會很快到來。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21179.html

相關文章

  • 目前可以使用ES10的5個新特性

    摘要:可選的語句中的有時候并沒有用,思考下面代碼使用瀏覽器可能尚未實現的功能這里回調函數中已經幫我們處理好的錯誤此代碼中的回調的信息并沒有用處。 為了保證可讀性,本文采用意譯而非直譯。 showImg(https://segmentfault.com/img/bVbucuJ?w=1024&h=682); ECMAScript 2015,也稱為ES6,是一個花了6年時間完成的主要版本。從那時起...

    canopus4u 評論0 收藏0
  • PyTips 0x15 - Python `__future__` 模塊

    摘要:模塊的導入一定要放在最上方,也就是在所有其它模塊之前導入。最后一列是每個新特性所對應的及簡單描述。相對導入則可以使用為標記導入相對目錄中的模塊,具體可以參考這篇文章導入模塊的幾種姿勢。 項目地址:https://git.io/pytips 我們經常從一些組織良好的 Python 項目中看到 __future__ 的身影,例如: from __future__ import absolu...

    klinson 評論0 收藏0
  • Java 10的10個新特性,將徹底改變你寫代碼的方式!

    摘要:的新特性說了這么多,看都會有哪些特性來改變我們寫代碼的方式呢局部變量類型推斷局部變量類型推斷可以說是中最值得注意的特性,這是語言開發人員為了簡化應用程序的編寫而采取的又一步,如下圖所示。 showImg(https://segmentfault.com/img/remote/1460000015356980); Java 9才發布幾個月,很多玩意都沒整明白,現在Java 10又快要來了...

    ityouknow 評論0 收藏0
  • 關于PHP數組幾個小技巧

    摘要:我們知道在中多了幾個對數組使用的新特性。這里我們舉兩個實際的例子吧例子一仔細體會。例子二看到了吧,可以直接在循環中指定變量,然后在循環體中來使用,是不是很簡單好了本文就這些內容了,歡迎繼續關注。更多知識,請前往 我們知道在PHP7.1中多了幾個對數組使用的新特性。 這里我們舉兩個實際的例子吧: 例子一: // PHP 7.1+ $options = [enabled => true, ...

    chenjiang3 評論0 收藏0
  • Java核心技術教程整理,長期更新

    以下是Java技術棧微信公眾號發布的關于 Java 的技術干貨,從以下幾個方面匯總。 Java 基礎篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進階篇 Java 新特性篇 Java 工具篇 Java 書籍篇 Java基礎篇 8張圖帶你輕松溫習 Java 知識 Java父類強制轉換子類原則 一張圖搞清楚 Java 異常機制 通用唯一標識碼UUID的介紹及使用 字符串...

    Anchorer 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<