摘要:使用返回值類型聲明時(shí),如果沒(méi)有聲明為嚴(yán)格模式,如果返回值不是預(yù)期的類型,還是會(huì)對(duì)其進(jìn)行強(qiáng)制類型轉(zhuǎn)換。生成器的兩個(gè)新特性和可以組合。
1. ?? 運(yùn)算符(NULL 合并運(yùn)算符)
把這個(gè)放在第一個(gè)說(shuō)是因?yàn)槲矣X(jué)得它很有用。用法:
$a = $_GET["a"] ?? 1;
它相當(dāng)于:
我們知道三元運(yùn)算符是可以這樣用的:
$a ?: 1但是這是建立在 $a 已經(jīng)定義了的前提上。新增的 ?? 運(yùn)算符可以簡(jiǎn)化判斷。
2. 函數(shù)返回值類型聲明官方文檔提供的例子(注意 ... 的邊長(zhǎng)參數(shù)語(yǔ)法在 PHP 5.6 以上的版本中才有):
從這個(gè)例子中可以看出現(xiàn)在函數(shù)(包括匿名函數(shù))都可以指定返回值的類型。
這種聲明的寫(xiě)法有些類似于 swift:
func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!" return greeting }這個(gè)特性可以幫助我們避免一些 PHP 的隱式類型轉(zhuǎn)換帶來(lái)的問(wèn)題。在定義一個(gè)函數(shù)之前就想好預(yù)期的結(jié)果可以避免一些不必要的錯(cuò)誤。
不過(guò)這里也有一個(gè)特點(diǎn)需要注意。PHP 7 增加了一個(gè) declare 指令:strict_types,既使用嚴(yán)格模式。
使用返回值類型聲明時(shí),如果沒(méi)有聲明為嚴(yán)格模式,如果返回值不是預(yù)期的類型,PHP 還是會(huì)對(duì)其進(jìn)行強(qiáng)制類型轉(zhuǎn)換。但是如果是嚴(yán)格模式, 則會(huì)出發(fā)一個(gè) TypeError 的 Fatal error。
強(qiáng)制模式:
以上代碼可以正常執(zhí)行,foo 函數(shù)返回 int 1,沒(méi)有任何錯(cuò)誤。
嚴(yán)格模式:
在聲明之后,就會(huì)觸發(fā)致命錯(cuò)誤。
是不是有點(diǎn)類似與 js 的 strict mode?
3. 標(biāo)量類型聲明PHP 7 中的函數(shù)的形參類型聲明可以是標(biāo)量了。在 PHP 5 中只能是類名、接口、array 或者 callable (PHP 5.4,即可以是函數(shù),包括匿名函數(shù)),現(xiàn)在也可以使用 string、int、float和 bool 了。
官方示例:
需要注意的是上文提到的嚴(yán)格模式的問(wèn)題在這里同樣適用:強(qiáng)制模式(默認(rèn),既強(qiáng)制類型轉(zhuǎn)換)下還是會(huì)對(duì)不符合預(yù)期的參數(shù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換,嚴(yán)格模式下則觸發(fā) TypeError 的致命錯(cuò)誤。
4. use 批量聲明PHP 7 中 use 可以在一句話中聲明多個(gè)類或函數(shù)或 const 了:
但還是要寫(xiě)出每個(gè)類或函數(shù)或 const 的名稱(并沒(méi)有像 python 一樣的 from some import * 的方法)。
需要留意的問(wèn)題是:如果你使用的是基于 composer 和 PSR-4 的框架,這種寫(xiě)法是否能成功的加載類文件?其實(shí)是可以的,composer 注冊(cè)的自動(dòng)加載方法是在類被調(diào)用的時(shí)候根據(jù)類的命名空間去查找位置,這種寫(xiě)法對(duì)其沒(méi)有影響。
5. 其他的特性其他的一些特性我就不一一介紹了,有興趣可以查看官方文檔:
http://php.net/manual/en/migration70.new-features.php
簡(jiǎn)要說(shuō)幾個(gè):
PHP 5.3 開(kāi)始有了匿名函數(shù),現(xiàn)在又有了匿名類了;
define 現(xiàn)在可以定義常量數(shù)組;
閉包(?Closure)增加了一個(gè) call 方法;
生成器(或者叫迭代器更合適)可以有一個(gè)最終返回值(return),也可以通過(guò) yield from 的新語(yǔ)法進(jìn)入一個(gè)另外一個(gè)生成器中(生成器委托)。
生成器的兩個(gè)新特性(return 和 yield from)可以組合。具體的表象大家可以自行測(cè)試。PHP 7 現(xiàn)在已經(jīng)到 RC5 了,最終的版本應(yīng)該會(huì)很快到來(lái)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21179.html
摘要:可選的語(yǔ)句中的有時(shí)候并沒(méi)有用,思考下面代碼使用瀏覽器可能尚未實(shí)現(xiàn)的功能這里回調(diào)函數(shù)中已經(jīng)幫我們處理好的錯(cuò)誤此代碼中的回調(diào)的信息并沒(méi)有用處。 為了保證可讀性,本文采用意譯而非直譯。 showImg(https://segmentfault.com/img/bVbucuJ?w=1024&h=682); ECMAScript 2015,也稱為ES6,是一個(gè)花了6年時(shí)間完成的主要版本。從那時(shí)起...
摘要:模塊的導(dǎo)入一定要放在最上方,也就是在所有其它模塊之前導(dǎo)入。最后一列是每個(gè)新特性所對(duì)應(yīng)的及簡(jiǎn)單描述。相對(duì)導(dǎo)入則可以使用為標(biāo)記導(dǎo)入相對(duì)目錄中的模塊,具體可以參考這篇文章導(dǎo)入模塊的幾種姿勢(shì)。 項(xiàng)目地址:https://git.io/pytips 我們經(jīng)常從一些組織良好的 Python 項(xiàng)目中看到 __future__ 的身影,例如: from __future__ import absolu...
摘要:的新特性說(shuō)了這么多,看都會(huì)有哪些特性來(lái)改變我們寫(xiě)代碼的方式呢局部變量類型推斷局部變量類型推斷可以說(shuō)是中最值得注意的特性,這是語(yǔ)言開(kāi)發(fā)人員為了簡(jiǎn)化應(yīng)用程序的編寫(xiě)而采取的又一步,如下圖所示。 showImg(https://segmentfault.com/img/remote/1460000015356980); Java 9才發(fā)布幾個(gè)月,很多玩意都沒(méi)整明白,現(xiàn)在Java 10又快要來(lái)了...
摘要:我們知道在中多了幾個(gè)對(duì)數(shù)組使用的新特性。這里我們舉兩個(gè)實(shí)際的例子吧例子一仔細(xì)體會(huì)。例子二看到了吧,可以直接在循環(huán)中指定變量,然后在循環(huán)體中來(lái)使用,是不是很簡(jiǎn)單好了本文就這些內(nèi)容了,歡迎繼續(xù)關(guān)注。更多知識(shí),請(qǐng)前往 我們知道在PHP7.1中多了幾個(gè)對(duì)數(shù)組使用的新特性。 這里我們舉兩個(gè)實(shí)際的例子吧: 例子一: // PHP 7.1+ $options = [enabled => true, ...
以下是Java技術(shù)棧微信公眾號(hào)發(fā)布的關(guān)于 Java 的技術(shù)干貨,從以下幾個(gè)方面匯總。 Java 基礎(chǔ)篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進(jìn)階篇 Java 新特性篇 Java 工具篇 Java 書(shū)籍篇 Java基礎(chǔ)篇 8張圖帶你輕松溫習(xí) Java 知識(shí) Java父類強(qiáng)制轉(zhuǎn)換子類原則 一張圖搞清楚 Java 異常機(jī)制 通用唯一標(biāo)識(shí)碼UUID的介紹及使用 字符串...
閱讀 1151·2023-04-26 03:02
閱讀 1191·2023-04-25 19:18
閱讀 2595·2021-11-23 09:51
閱讀 2577·2021-11-11 16:55
閱讀 2631·2021-10-21 09:39
閱讀 1710·2021-10-09 09:59
閱讀 2005·2021-09-26 09:55
閱讀 3532·2021-09-26 09:55