在php7发布了之后,官方又紧接着发布了php7.1、php7.2,我们也接着使用了新版本。接下来就说说7.1有那些新的特性。

Nullable types

在7的时候,如果使用了强类型就必须传递或者返回指定的类型。现在新增了Nullable Types就可以传递或者返回null类型。像下面的那样:

function testNullable(string $argument): string

{

return $argument;

}

echo testNullable('test null'); // 输出 'test null'

var_dump(testNullable(null)); // 报错

上面示例如果是跑在php7上面会报以下语法错误,他是不支持传递一个null给string。

Fatal error: Uncaught TypeError: Argument 1 passed to testNullable() must be of the type string, null given.

下面的示例我们将采用新特性来保证代码不会出错,只需要在类型前面加上?号就可以支持null值。

function testNullable(?string $argument): ?string

{

return $argument;

}

echo testNullable('test null'); // 输出 'test null'

var_dump(testNullable(null)); // 输出 NULL

Void 返回值

返回值声明为void类型的方法要么干脆省去return语句,要么使用一个空的return语句。 对于void函数来说,NULL不是一个合法的返回值。

function getVoid(): void

{

return null;

}

getVoid();

上述代码会产生一个运行时错误。

Fatal error: A void function must not return a value (did you mean "return;" instead of "return null;"

改成下面的形式。

function getVoid(): void

{

return ; // 或者return 语句也不写

}

getVoid();

类常量可见性

在以前类的常量一直都是public可见性。现在支持protected,private。

class Test

{

const TEST_MAX = 2;

public const TEST_MIN = 0;

protected const TEST_MIDDLE = 1;

private const TEST_PRIVATE = 3;

}

iterable伪类

这可以被用在参数或者返回值类型中,它代表接受数组或者实现Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的array或对象返回值类型到iterable。

function iterator(iterable $iter)

{

foreach ($iter as $val) {

//

}

}

多异常捕获处理

一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。

在7.1以前我们需要这样来捕获多个异常.

try {

// some code

} catch (FirstException $e) {

// handle first

} catch (SecondException $e) {

} catch (ThreeException $e) {

}

7.1以后我们就可以像这样定义。

try {

// some code

} catch (FirstException | SecondException $e | ThreeException $e) {

// handle first and second exceptions

}

list键名

现在list()和新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组都赋值给一些变量(与短数组语法类似)。

$data = [

["id" => 1, "name" => 'Tom'],

["id" => 2, "name" => 'Fred'],

];

// list() style

list("id" => $id1, "name" => $name1) = $data[0];

// [] style

["id" => $id1, "name" => $name1] = $data[0];

// list() style

foreach ($data as list("id" => $id, "name" => $name)) {

// logic here with $id and $name

}

// [] style

foreach ($data as ["id" => $id, "name" => $name]) {

// logic here with $id and $name

}

Closure::fromCallable

用于将callable快速地转为一个Closure对象。

class Test

{

public function exposeFunction()

{

return Closure::fromCallable([$this, 'privateFunction']);

}

private function privateFunction($param)

{

var_dump($param);

}

}

$privFunc = (new Test)->exposeFunction();

$privFunc('some value'); // 输出 string(10) "some value "

上面已经介绍重要的一些php7.1更新功能。如果你需要升级迁移你可以查看官方文档

。如果你需要查看php7的更新特性,你可以通过阅读这篇文章。

php7.1函数,PHP7.1常用新特性和函数相关推荐

  1. php7 断言,PHP7.2常用新特性和函数

    通过这篇你将了解PHP 7.2版本中添加的一些新特性和函数. PHP 7.2是一个LTS版本,他提供了一些新功能和几个较小的核心改进.开箱即用的PHP 7.2为我们提供了新的哈希,类型提示,类型扩展和 ...

  2. oracle 11g函数包缓存,Oracle11新特性——PLSQL函数缓存结果(一)

    Oracle11g新增的SQL缓存结果集的功能前面已经介绍过了.同时Oracle对PL/SQL的函数也进行了相应的增加.允许函数缓存返回结果. 先看一个简单的例子: SQL> CREATE TA ...

  3. 【SQL开发实战技巧】系列(四十七):Oracle12C常用新特性☞非分区表在线转分区表online clause(不停业务+索引有效)

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  4. 【SQL开发实战技巧】系列(四十五):Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节

    系列文章目录 文章目录 系列文章目录 前言 Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节 案例一:CDB+PDB环境启用扩展 案例二 ...

  5. ES6新特性(函数默认参数,箭头函数)

    ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者 ...

  6. C#: 8.0 和 9.0 常用新特性

    在<带你了解C#每个版本新特性> 一文中介绍了,C# 1.0 到 7.0 的不同特性,本文接着介绍在 8.0 和 9.0 中的一些常用新特性. C# 8.0 在 dotNET Core 3 ...

  7. C 常用新特性(下)

    多线程 什么是多线程这里就不过多介绍,新特性关于多线程最主要的就是std::thread的使用,它的使用也很简单,看代码: 这里记住,std::thread在其对象生命周期结束时必须要调用join() ...

  8. JDK1.8新特性及常用新特性

    JDK1.8的新特性 *Lambda表达式 新的日期API--Date time 引入Optional--防止空指针异常 *接口的默认方法和静态方法 *新增方法引用格式 *新增Stream类 注解相关 ...

  9. Java8常用新特性详解

    文章目录 Java8新特性纵览 Lambda表达式 为什么使用Lambda表达式? 简单使用 Lambda语法规则 函数式接口 什么是函数式(Functional)接口 如何理解函数式接口 Java内 ...

最新文章

  1. 如果让你拥有100万粉丝,你会做什么
  2. CentOS上使用libtld
  3. QM模块常见检验分类术语
  4. php 状态模式,PHP设计模式之状态模式
  5. 有趣分享:国内产业图谱
  6. 申请鲲鹏920测试机试水+编译nginx
  7. linux的基础知识——模型结构和数据包的封装
  8. 聊个天就把生信分析做了?你的未来在哪里?
  9. 云计算商家必争之地 推荐几款云平台
  10. windows上telnet用法 测试端口号
  11. 传智播客 C/C++学习笔记 指针3 理解指针必须与内存四区相结合
  12. MATLAB textscan之模式匹配用法
  13. 卫星影像离线数据包(免费下载)
  14. 【verbs】ibv_reg_mr()
  15. Java编程笔记2:初始化和清理
  16. 软件框架技术1(MyBatis)
  17. HMMER批量比对及结果处理
  18. 《MySQL高级篇》三、存储引擎
  19. [OpenWrt] 使用TLL刷FLASH(固件)的方法
  20. 基于Java的开源3D游戏引擎jMonkeyEngine

热门文章

  1. 海思芯片固件修改工具_地平线X3开发板开箱、固件刷写、环境配置
  2. python自增_python – 类实例的自动递增ID
  3. Android图片缓存框架Glide
  4. Kali Linux 2017中Scapy运行bug解决
  5. 交流潮流matlab程序,大神们,求个电力系统潮流计算的matlab程序。
  6. 远程服务器返回错误: (500) 内部服务器错误。_[源码和文档分享]基于TCP SOCKET实现的远程聊天系统...
  7. 扎克伯格凌晨放大招,说几句话能造世界的那种
  8. 微软2022新bug:大量程序员连夜加班,只因日期数据溢出
  9. 手机加速度计数据可以被随意读取,iOS关不掉权限,安卓这次能限制
  10. AI端计算产业应用:如何快速训练高精度模型并在设备端加速计算 | 公开课报名...