2. 函數返回值類型聲明

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

functionarraysSum(array...$arrays):array

{

returnarray_map(function(array$array): int {

returnarray_sum($array);

}, $arrays);

}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

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

這種聲明的寫法有些類似於 swift:func sayHello(personName: String) -> String {

let greeting = "Hello, "+ personName +"!"

returngreeting

}

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

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

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

強制模式:

functionfoo($a) : int

{

return$a;

}

foo(1.0);

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

嚴格模式:

declare(strict_types=1);

functionfoo($a) : int

{

return$a;

}

foo(1.0);

# PHP Fatal error:  Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6

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

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

3. 標量類型聲明

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

官方示例:

// Coercive mode

functionsumOfInts(int ...$ints)

{

returnarray_sum($ints);

}

var_dump(sumOfInts(2, '3', 4.1));

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

4. use 批量聲明

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

usesome/namespace/{ClassA, ClassB, ClassCasC};

usefunctionsome/namespace/{fn_a, fn_b, fn_c};

useconstsome/namespace/{ConstA, ConstB, ConstC};

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

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

5. 其他的特性

簡要說幾個:

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

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

Closure)增加了一個 call 方法;

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

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

PHP 7 的五大新特性

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

作者:

2015-10-26 09:04

php7的核心开发者,php7 五大新特性相关推荐

  1. Java EE 8的五大新特性详解

    Java EE 8的五大新特性详解 2018.4.3 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. Java EE 8带来了很多新特性,其中最好的新特性有下面五个. 备受期待的Ja ...

  2. 怎么真正入行Web前端行业?JavaScript五大新特性是什么?

    怎么真正入行Web前端行业?JS五大新特性是什么?JavaScript是Web开发者必学的三种语言之一,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.随着互联网的更迭以及技术的革新,Jav ...

  3. 开发者工具的新特性 (Chrome 71) [双语+视频]

    本文来源: developers.google.com/web/updates- 文章作者: Kayce Basques Chrome DevTools & Lighthouse 技术文档工程 ...

  4. QGIS 3.20 五大新特性解析

    2021年6月18日,经过4个月的开发周期,QGIS发布了最新版(LR)QGIS 3.20,随之一同发布的还有长期稳定版(LTR)QGIS 3.16.8. 相比3.18版为期4天的打包过程,本次打包时 ...

  5. 独家 | Python 3.10发布——你应该知道的五大新特性

    作者:Varun Singh 翻译:欧阳锦校对:王可汗本文约1700字,建议阅读5分钟 本文为大家介绍了新版本Python的新特性. 图片来源:Canva--由Varun Singh编辑 我们都知道P ...

  6. Java 14 中令人期待的五大新特性!

    随着新的 Java 发布生命周期的到来,新版本预计将于 2020 年 3 月发布,本文将对其中的 5 个主要特性作些概述. 作者 | Sylvain Saurel 译者 | 苏本如,责编 | 郭芮 出 ...

  7. JDK 13 的五大新特性!你最中意哪个?

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:阿飞的博客 关注我,回复口令获取可获取独家整理的学习资料: - 001:领取<Spring ...

  8. PHP 7 的五大新特性

    1. 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: <php $a = isset($_GET['a'] ...

  9. 朱凯:ClickHouse 全貌介绍与年度最令人兴奋的五大新特性

    分享嘉宾:朱凯 明源云 大数据平台首席专家 编辑整理:肖鹏 VIVO 出品平台:DataFunTalk 导读:都说天下武功唯快不破,ClickHouse 从2016年诞生至今就一直快字著称.Click ...

最新文章

  1. 郑州升达学院计算机考试,第35次全国计算机等级考试报名工作通知
  2. 一个有趣的算老鼠程序
  3. 航空购票系统源码java_航空售票系统 - WEB源码|JSP源码/Java|源代码 - 源码中国
  4. win10命令提示符怎么打开_Win10系统防火墙怎么打开?ARP防火墙启用步骤
  5. 信安教程第二版-第12章网络安全审计技术原理与应用
  6. 负载敏感系统详解_宣布Enarx用于运行敏感工作负载
  7. android studio读写txt,Android Studio从.txt文件读取/写入,保存路径?
  8. RHEL6.1 java显示乱码
  9. Asp.Net SignalR - 简单聊天室实现
  10. 本地socket通讯 -转
  11. Linux Apache服务详解——Apache服务访问控制
  12. yalmip使用指南
  13. 使用liteide开发go遇到的问题
  14. ProxySQL 入门教程
  15. 【RNA-seq】表达矩阵的归一化处理(RPKM,TPM,FPKM,RPM(CPM))
  16. 函数6:lambda 表达式
  17. 英语3500词(14/20)dynasty主题 (2022.1.26)
  18. Emacs之缩进(五十三)
  19. Java计算两年后的前一天yyyyMMdd
  20. 【监督学习】第三课(机器学习,折半算法,专家算法,感知机perceptron,Winnow,在线学习)

热门文章

  1. 2021年中国电子设备维修服务市场趋势报告、技术动态创新及2027年市场预测
  2. Python菜鸟入门:day13编程学习
  3. 模板模式(Template Pattern)
  4. PDF 开发者 Charles Geschke 去世,39 年前联合创立软件巨头 Adobe!
  5. 2020年度“博客之星”报名开启!万元大奖等着你
  6. 九问国产操作系统,九大掌门人万字回应!
  7. 苹果回应iPhone12用5G耗电快;央行:微信支付宝和数字人民币不存在竞争关系;Win10X 将于年底签署 RTM|极客头条
  8. Python自动化办公 | 补写178份Word日报!
  9. Mybatis 逆向工程使用姿势不对文档全被清空,一怒之下写了个插件……
  10. SpaceX 火箭发射成功,一文了解所用的软件技术栈!