PHP 7.2已于 11月30日正式发布,该版本具有新特性,功能和改进,可以让我们编写更好的代码。在这篇文章中,我将介绍一些PHP 7.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目前不允许子类和它们的父类或接口之间的参数类型有任何差异。那是什么意思?

考虑下面的代码:

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起,我们被允许在 分组命名空间中使用尾随逗号。

请参阅列表语法中的尾随逗号以便更深入地查看此RFC和一些代码示例。

php declaration of,PHP 7.2中的新功能(参数类型声明)相关推荐

  1. bit1618c 功能简介_c 9中的新功能简介

    bit1618c 功能简介 With the upcoming release of .NET 5 - the release which unifies the .NET runtimes - Mi ...

  2. drx功能开启后_简单实用!小米手机中这些新功能真香

    小米手机作为国产机热销品牌之一,它除了有好看的外观,还有很多隐藏的实用功能,今天小编就来和大家分享5个小米手机里你不知道的功能. Al电话助理 看到陌生号码时,很多人第一反应就是挂掉,不想接听,但又担 ...

  3. SQLSERVER2014中的新功能

    SQLSERVER2014中的新功能 转载自:http://blog.csdn.net/maco_wang/article/details/22701087 博客人物:maco_wang SQLSER ...

  4. callable object与新增的function相关 C++11中万能的可调用类型声明std::function...

    在c++11中,一个callable object(可调用对象)可以是函数指针.lambda表达式.重载()的某类对象.bind包裹的某对象等等,有时需要统一管理一些这几类对象,新增的function ...

  5. java中怎样定义实数_Java Math 类中的新功能,第 1 部分: 实数

    在这篇由两部分组成的文章中,Elliotte Rusty Harold 与您一起探讨经典 java.lang.Math 类中的"新"功能.第 1 部分主要讨论比较单调的数学函数.第 ...

  6. Windows Server 2012 DHCP 服务器中的新功能:故障转移和策略

    Windows Server 2012 DHCP 服务器中的新功能如下: DHCP 故障转移:此功能提供让两个 DHCP 服务器服务于 同一子网或作用域的 IP 地址和选项配置的能力,前提是 DHCP ...

  7. AOSP6.0.1 系统中增加新的category类型与app绑定,并在hotseat容器中加载app

    在launcher3(桌面程序)的hotseat中,可以通过修改dw_phone_hotseat.xml在指定位置加载指定app(仅限于已经指定category类型为APP_xxxx的app或者是系统 ...

  8. spring 5.x(1)-----Spring Framework 5.x中的新功能

    Spring Framework 5.x中有什么新功能 5.1版中的新功能 一般核心修订 基础设施: 在类路径和模块路径上对JDK 11的无警告支持. 支持Graal原生图像约束(反射,参数名称). ...

  9. Java平台,标准版Oracle JDK 9中的新功能

    Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月 JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个 ...

最新文章

  1. Cisco的相关配置
  2. 4G EPS 中的小区选择
  3. java中执行cmd命令_如何通过Java执行cmd命令
  4. Python之分享常用的五款动态数据可视化工具
  5. python双素数_python双素数_用Python打印100以下的所有双素数对
  6. 作者:张慧(1984-),女,中国科学院软件研究所助理研究员
  7. 使用dom4j来解析相关的xml字符串
  8. 计算机考试c语言真题及答案,计算机二级c语言考试试题及答案
  9. Android_自适应布局
  10. 新浪微博分享遇到的心酸的问题
  11. 值得反复研读的表连接之CARTESIAN JOIN方式
  12. 图像处理-HSV和RGB相互转换
  13. matlab 之永磁同步电机仿真
  14. 最大化速率的智能反射面波束成形(上):分式规划
  15. MySQL函数大全及用法示例
  16. 使用官方连供墨盒,打印机暂停打印的可能解决方案
  17. 职场老油条的22条经验之谈
  18. 新年寄语 给自己吧
  19. 一图看懂FC存储网络架构
  20. 【2020】07 留校

热门文章

  1. BZOJ 1041 数学
  2. 线程1-线程常用方法
  3. 阅读《梦断代码》计划
  4. Android 博客园客户端 (四) 基本功能完成(博客列表和内容、新闻列表和内容、推荐博主)...
  5. 写在ICDsoft购买和Paypal付款之后
  6. [译]Chapter 1 - An Introduction to ASP.NET MVC(2)
  7. 百度地图服务器不显示本地运行,百度地图定位成功,但地图不显示
  8. 高阶台式计算机零组件,2010年电脑旺季!零组件缺DDR3封测紧
  9. Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]
  10. 仿百度地图全景小球旋转