php7.2版本具有新特性,功能和改进,可以让我们编写更好的代码,下面的文章中我将介绍php7.2中的一个新的功能:参数类型声明,话不多说,让我们来具体看看正文内容。

参数类型声明

从PHP 5开始,我们可以在函数的声明中指定预期要传递的参数类型。如果给定值的类型不正确,那么PHP将引发错误。参数类型声明(也称为类型提示)指定预期传递给函数或类方法的变量的类型。

来一个例子:class MyClass {

public $var = 'Hello World';

}

$myclass = new MyClass;

function test(MyClass $myclass){

return $myclass->var;

}

echo test($myclass);

在这段代码中,测试函数需要MyClass的一个实例。不正确的数据类型会导致以下致命错误:Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8

由于PHP 7.2 类型提示可以与对象数据类型一起使用,并且此改进允许将通用对象声明为函数或方法的参数。这里是一个例子:class MyClass {

public $var = '';

}

class FirstChild extends MyClass {

public $var = 'My name is Jim';

}

class SecondChild extends MyClass {

public $var = 'My name is John';

}

$firstchild = new FirstChild;

$secondchild = new SecondChild;

function test(object $arg) {

return $arg->var;

}

echo test($firstchild);

echo test($secondchild);

在这个例子中,我们调用了两次测试函数,每次调用都传递一个不同的对象。在以前的PHP版本中这是不可能的。

对象返回类型声明

如果参数类型声明指定函数参数的预期类型,则返回类型声明指定返回值的预期类型。

返回类型声明指定了函数预期返回的变量的类型。

从PHP 7.2开始,我们被允许为对象数据类型使用返回类型声明。这里是一个例子:class MyClass {

public $var = 'Hello World';

}

$myclass = new MyClass;

function test(MyClass $arg) : object {

return $arg;

}

echo test($myclass)->var;

以前的PHP版本会导致以下致命错误:Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10

当然,在PHP 7.2中,这个代码会回应'Hello World'。

参数类型宽限声明

PHP目前不允许子类和它们的父类或接口之间的参数类型有任何差异。那是什么意思?

考虑下面的代码:<?php

class MyClass {

public function myFunction(array $myarray) { /* ... */ }

}

class MyChildClass extends MyClass {

public function myFunction($myarray) { /* ... */ }

}

这里我们省略了子类中的参数类型。在PHP 7.0中,此代码会产生以下警告:Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8

自PHP 7.2以来,我们被允许在不破坏任何代码的情况下省略子类中的类型。这个建议将允许我们升级类以在库中使用类型提示,而不需要更新所有的子类。

在列表语法中尾随逗号

数组中最后一项之后的尾随逗号是PHP中的有效语法,有时为了轻松附加新项目并避免由于缺少逗号而导致解析错误,鼓励使用它。自PHP 7.2起,我们被允许在 分组命名空间中使用尾随逗号。

相关文章推荐:

php7 参数类型限定,PHP 7.2新特性:参数类型声明(附代码)相关推荐

  1. ​Python 3 新特性:类型注解——类似注释吧,反正解释器又不做校验

    ​Python 3 新特性:类型注解 Crossin ​ 上海交通大学 计算机应用技术硕士 95 人赞同了该文章 前几天有同学问到,这个写法是什么意思: def add(x:int, y:int) - ...

  2. Python 3 新特性:类型注解

    Python 3 新特性:类型注解 之前也看到这种写法,有人疑惑这个写法是什么意思: def add(x:int, y:int) -> int:return x + y 我们知道 Python ...

  3. 分析 C# 2.0 新特性 -- 空类型(Nullable Types)

    分析 C# 2.0 新特性  -- 空类型(Nullable Types) 在讨论C# 2.0 空类型前,先回顾一下.NET 1.0和.NET 1.1对于类型有下面这样的定义: ".NET  ...

  4. java编译器加上参数_java8 之 Java编译器的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  5. 【面试】HTML5 有哪些新特性?_声明方式

    最近看了一些与html基础相关的入门教学视频,心得感悟只有:不同特性的标签记住就好了!但理智告诉我,一切还未正式开始.肿么办?-_-# 是不是可以根据具体html的面试问题对理论知识进行认知拓展与实践 ...

  6. decfloat转换成oracle种类型,Oracle GoldenGate 19.1新特性

    1.GoldenGate 19.1 新特性概览 a.支持Oracle数据库19.1 长期支持发布版本.集成Oracle GoldenGate 12.3版的最终补丁集更新. b.微服务的安全性和可管理性 ...

  7. swift php 类型判断,Swift 5.1 新特性:透明类型关键字 some

    相信大家都对刚发布的 SwiftUI 印象深刻,在看示例代码的时候发现 View 前面有一个关键字  some.我开始以为是 SwiftUI 自带的属性,后来经网友提醒发现是 Swift 5.1 的新 ...

  8. 23.Flink-高级特性-新特性-Streaming Flie Sink\介绍\代码演示\Flink-高级特性-新特性-FlinkSQL整合Hive\添加依赖和jar包和配置

    23.Flink-高级特性-新特性-Streaming Flie Sink 23.1.介绍 23.2.代码演示 24.Flink-高级特性-新特性-FlinkSQL整合Hive 24.1.介绍 24. ...

  9. Java | 学习系列 Java1.8 新特性详解( 包含学习代码 )

    前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.在Java Code Geeks上已经有很多介绍Java 8新特性的文章,例如Playing with Java ...

最新文章

  1. php和asp.net下SQLite3的执行速度对比
  2. Python函数的正确用法及其注意事项
  3. 目标跟踪从0到1:算法与实践
  4. js返回上一页与前进下一页
  5. 解字符串不能超过8000的方法及交叉表的处理
  6. 《通过C#学Proto.Actor模型》之 HelloWorld
  7. x86 32位oracle,X86 32位和64位的区别
  8. 旋翼机自主着陆-主要技术难点
  9. RK3288_Android7.1调试以太网ethernet
  10. Facebook开源新的压缩算法,性能超zlib
  11. php要怎么使用imagettftext_燃气灶漏气怎么办?使用天然气、液化气要注意什么?...
  12. Python 字典(Dictionary) items()方法
  13. 用reloadRowsAtIndexPaths刷新单个cell 跳动问题
  14. python编辑数学函数图形_Python 绘制你想要的数学函数图形
  15. windows命令大全
  16. win10系统与时间服务器同步超时,如何解决Win10系统时间无法同步的问题?
  17. Java实现熵值法计算_熵值法确定权重的步骤及适用范围
  18. 小米平板3最简单刷成开发版获得ROOT权限的步骤
  19. [NOI 1997] 积木游戏(dp)
  20. 电脑桌面文件不见了怎么恢复?

热门文章

  1. 阿里云服务器安全组配置-有关访问实例异常的解决办法
  2. 阿里云服务器(ECS)集群解决方案
  3. 关于elasticsearch boostrap checks failed错误类型整理及解决方法
  4. 解决firefox和IE9对icon font字体的跨域访问问题
  5. tomcat端口被占用的两个解决方法
  6. mysql修改root密码及修改密码过程中报错的解决方案
  7. 从文件扩展名获取MIME类型
  8. win11怎么退回win7 Windows11退回win7的步骤方法
  9. hsv封装好的调试工具类
  10. webpack3快速入门