资讯专栏INFORMATION COLUMN

PHP 7.2中的新功能(参数类型声明)

Paul_King / 1634人阅读

摘要:在这篇文章中,我将介绍一些中最有趣的语言特性参数类型声明。参数类型声明也称为类型提示指定预期传递给函数或类方法的变量的类型。参数类型宽限声明目前不允许子类和它们的父类或接口之间的参数类型有任何差异。

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目前不允许子类和它们的父类或接口之间的参数类型有任何差异。那是什么意思?
考虑下面的代码:


这里我们省略了子类中的参数类型。在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和一些代码示例。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28566.html

相关文章

  • PHP 7.2 功能介绍

    摘要:這次發布包含新特性功能,及優化,以讓我們寫出更好的代碼。安全性改进密码哈希中的是荣获年密码哈希算法比赛中的冠军的强大哈希算法,将其作为安全算法的替代品。是一个跨平台和跨语言的库,用于加密,解密,签名,密码哈希等。中函数已被取代。 showImg(https://segmentfault.com/img/bV8pyG?w=1240&h=620); PHP 7.2 已經在 2017 年 1...

    GeekQiaQia 评论0 收藏0
  • Use PHP7

    摘要:说明目前中,计划于月日发布。安全改进密码哈希中的是一个强大的哈希算法,被选为年密码哈希大赛的冠军,将它作为算法的安全替代品。已将设置为非零值已被标记为已弃用。被认为是平台相关的,将被弃用。 说明 目前RC3中,PHP 7.2计划于11月30日发布。新版本将提供新的特性,功能和改进,使我们能够编写更好的代码。在这篇文章中,我将介绍一些PHP 7.2中最有趣的语言特性。 参数类型声明 从P...

    yearsj 评论0 收藏0
  • PHP函数类型声明总结

    摘要:例如标量类型和返回值声明函数正式支持标量类型,和返回值类型可声明类型同参数声明。遗憾是如果函数返回值有可能是,就不能指定返回值类型。 转载请注明出处:https://tlanyan.me/argument-t... PHP7开始支持标量类型声明,强类型语言的味道比较浓。使用这个特性的过程中踩过两次坑:一次是声明boolean类型参数,最近一次是声明double类型参数,都导致运行时出...

    luodongseu 评论0 收藏0
  • 重读PHP手册笔记系列(二)

    摘要:通过注册自动加载器,脚本引擎在出错失败前有了最后一个机会加载所需的类构造函数和析构函数构造函数允行开发者在一个类中定义一个方法作为构造函数。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行抽象类支持抽象类和抽象方法。 语言参考 1. 类型 1.1 简介 showImg(https://segmentfault.com/img/bVbqlNJ?w=531&h=379);...

    马龙驹 评论0 收藏0
  • SG :一个简单的PHP语法糖扩展

    摘要:本文介绍笔者自己写的语法糖扩展,扩展了一种全新的超全局变量获取方式。优秀的语法糖,应该是一种灵魂思想的注入,简单写法的应用。非常重要的一点是它很简单项目背景这个出发点很简单,从扩展名称我们应该能猜到它是做什么的。 奇技指南语法糖往往给程序员提供了更实用的编码方式,可以使代码更简洁流畅,语义更自然。本文介绍笔者自己写的PHP语法糖扩展,扩展了一种全新的PHP超全局变量获取方式。本文作者...

    warkiz 评论0 收藏0

发表评论

0条评论

Paul_King

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<