首页 >后端开发 >PHP7 > 正文

PHP7.2中的新功能(参数类型声明)

转载2019-11-11 13:52:080701
PHP 7.2已正式发布,该版本具有新特性,功能和改进,可以让我们编写更好的代码。在这篇文章中,我将介绍一些PHP 7.2中最有趣的语言特性-参数类型声明。

推荐:《PHP7教程

参数类型声明

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

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

以上就是PHP7.2中的新功能(参数类型声明)的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码
  • 相关标签:PHP7.2
  • 本文转载于:segmentfault,如有侵犯,请联系a@php.cn删除
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • 不同之处:PHP7比PHP5.0性提升了两倍;比PHP5.0增了空接合操作符、结合比较运算符、函返回、匿名;PHP7允许程序员根据期望返回值返回
    实现golang语言多态方法:首先定义一个接口并在其一些要实现;然后定义一个结构体去实现;最后创建结构体对象就可赋值到该接口了。
    C语言“void”表示为无,相应“void *”为无指针,常用在程序编写对定义函、返回值、函指针进行,其作用是对函返回和进行限定。
    excel2010启动后默认文件是xlsx。excel2010提供了强大和工具,这些可以帮助我们发现模式或趋势,从而做出更决策并提高我们分析大据集力。
    是:atoi(),​其为“int atoi(char *str);”。
    JavaInt和Integer区别是:1、Int是基本,Integer是引用;2、Int不需要实例化,而Integer是一个,需要进行实例化,然后才对变量据进行处理。
    php7和php5之间区别:PHP7比PHP5.0性提升了两倍;比PHP5.0增了空接合操作符、结合比较运算符、函返回、匿名等等。

    2019-11-20

    1182

    是定义在一段独立代码块,用来实现某个。函书写格式:访问修饰符-返回值-函名(1-名1,2-名2..){执行语句-return-返回值}。
    Go语言是Google开发一种静态强、编译、并发,并具有垃圾回收编程语言。Go语法接近C语言,但对于变量有所不同。本文就来为大家介绍一下go语言处理json方法。
    php7特性有:将PHPNG代码合并到PHP7;降低内存消耗;标量,可以强制执行和返回;一致64位支持;改进了异常层次;已弃用SAPI和扩展被删除;添加了空合并运算符(?)
    本文由java入门教程栏目为大家介绍如何使用反射获取泛信息,希望可以帮助到有需要同学。
    PHP7.4 特性和废弃:1. 属性添加限定;​2. 箭头函;3. 有限返回协变与逆变;4. 组解包;5. 空合并运算符赋值;6. 值文字分隔符;7.
    golangmap是一种,将键与值绑定到一起,底层是用哈希表实现,可以快速通过键找到对应值。
    在OSI考模,网络层处理据单位是分组。网络层是实现两个端系统之间据透传送,具体包括寻址和路由选择、连接建立、保持和终止等。
    java方法覆盖也称为重写,即子定义了父方法。需要注意是:1、重写方法一定要与原方法有相同方法名、列表和返回值;2、被重写方法不是final

    专题推荐

    推荐视频教程
  • 《20天入门精通PHP》视频教程《20天入门精通PHP》视频教程
  • phpStudy V8 视频教程phpStudy V8 视频教程
  • PHP文件基础操作PHP文件基础操作
  • PHP开发免费公益直播课PHP开发免费公益直播课
  • 视频教程分类