php7.1函数,PHP7.1常用新特性和函数
在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常用新特性和函数相关推荐
- php7 断言,PHP7.2常用新特性和函数
通过这篇你将了解PHP 7.2版本中添加的一些新特性和函数. PHP 7.2是一个LTS版本,他提供了一些新功能和几个较小的核心改进.开箱即用的PHP 7.2为我们提供了新的哈希,类型提示,类型扩展和 ...
- oracle 11g函数包缓存,Oracle11新特性——PLSQL函数缓存结果(一)
Oracle11g新增的SQL缓存结果集的功能前面已经介绍过了.同时Oracle对PL/SQL的函数也进行了相应的增加.允许函数缓存返回结果. 先看一个简单的例子: SQL> CREATE TA ...
- 【SQL开发实战技巧】系列(四十七):Oracle12C常用新特性☞非分区表在线转分区表online clause(不停业务+索引有效)
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 【SQL开发实战技巧】系列(四十五):Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节
系列文章目录 文章目录 系列文章目录 前言 Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节 案例一:CDB+PDB环境启用扩展 案例二 ...
- ES6新特性(函数默认参数,箭头函数)
ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式: 从上面的代码可以看出存在一个问题,当传入的参数为0或者 ...
- C#: 8.0 和 9.0 常用新特性
在<带你了解C#每个版本新特性> 一文中介绍了,C# 1.0 到 7.0 的不同特性,本文接着介绍在 8.0 和 9.0 中的一些常用新特性. C# 8.0 在 dotNET Core 3 ...
- C 常用新特性(下)
多线程 什么是多线程这里就不过多介绍,新特性关于多线程最主要的就是std::thread的使用,它的使用也很简单,看代码: 这里记住,std::thread在其对象生命周期结束时必须要调用join() ...
- JDK1.8新特性及常用新特性
JDK1.8的新特性 *Lambda表达式 新的日期API--Date time 引入Optional--防止空指针异常 *接口的默认方法和静态方法 *新增方法引用格式 *新增Stream类 注解相关 ...
- Java8常用新特性详解
文章目录 Java8新特性纵览 Lambda表达式 为什么使用Lambda表达式? 简单使用 Lambda语法规则 函数式接口 什么是函数式(Functional)接口 如何理解函数式接口 Java内 ...
最新文章
- 如果让你拥有100万粉丝,你会做什么
- CentOS上使用libtld
- QM模块常见检验分类术语
- php 状态模式,PHP设计模式之状态模式
- 有趣分享:国内产业图谱
- 申请鲲鹏920测试机试水+编译nginx
- linux的基础知识——模型结构和数据包的封装
- 聊个天就把生信分析做了?你的未来在哪里?
- 云计算商家必争之地 推荐几款云平台
- windows上telnet用法 测试端口号
- 传智播客 C/C++学习笔记 指针3 理解指针必须与内存四区相结合
- MATLAB textscan之模式匹配用法
- 卫星影像离线数据包(免费下载)
- 【verbs】ibv_reg_mr()
- Java编程笔记2:初始化和清理
- 软件框架技术1(MyBatis)
- HMMER批量比对及结果处理
- 《MySQL高级篇》三、存储引擎
- [OpenWrt] 使用TLL刷FLASH(固件)的方法
- 基于Java的开源3D游戏引擎jMonkeyEngine
热门文章
- 海思芯片固件修改工具_地平线X3开发板开箱、固件刷写、环境配置
- python自增_python – 类实例的自动递增ID
- Android图片缓存框架Glide
- Kali Linux 2017中Scapy运行bug解决
- 交流潮流matlab程序,大神们,求个电力系统潮流计算的matlab程序。
- 远程服务器返回错误: (500) 内部服务器错误。_[源码和文档分享]基于TCP SOCKET实现的远程聊天系统...
- 扎克伯格凌晨放大招,说几句话能造世界的那种
- 微软2022新bug:大量程序员连夜加班,只因日期数据溢出
- 手机加速度计数据可以被随意读取,iOS关不掉权限,安卓这次能限制
- AI端计算产业应用:如何快速训练高精度模型并在设备端加速计算 | 公开课报名...