首页后端开发PHPPHP7+也支持类型声明了?有什么特性?

PHP7+也支持类型声明了?有什么特性?

时间2024-03-23 06:30:03发布访客分类PHP浏览1415
导读:这篇文章分享给大家的内容是关于PHP7+也支持类型声明了?有什么特性?,本文介绍得很详细,内容很有参考价值,希望可以帮到有需要的小伙伴,接下来就让小编带领大家一起了解看看吧。 PHP也开始搞类型声明,PHP7+增加了类型...
这篇文章分享给大家的内容是关于PHP7+也支持类型声明了?有什么特性?,本文介绍得很详细,内容很有参考价值,希望可以帮到有需要的小伙伴,接下来就让小编带领大家一起了解看看吧。


 


PHP也开始搞类型声明,PHP7+增加了类型声明的特性,下面本篇文章就来带大家了解一下PHP类型声明特性,分享一下在返回类型声明踩的坑,希望对大家有所帮助!

最近在研究PHP7的新特性,发现PHP也开始搞类型声明了,这么做的好处很明显:能提高程序运行速度。

下面开始介绍这一新特性:

默认情况下,所有的PHP文件都处于弱类型校验模式。

PHP7+增加了类型声明的特性,类型声明有两种模式:

  • 强制模式 (默认模式) 我的理解就是强制转换成需要的类型,不严格区分类型而是强转,类型不一致不报错
  • 严格模式 严格校验类型,类型与声明的不一致,报错

标量类型声明语法格式:

declare(strict_types=1);

其中strict_types的值:

  • 1表示严格类型校验模式,作用于函数调用和返回语句;
  • 0表示弱类型校验模式

可以使用的类型参数有:

  • string
  • int
  • float
  • bool
  • interfaces
  • array
  • callable

强制模式(默认模式)

?php

function sum(int ...$ints)
{
    
   return array_sum($ints);

}
    

print(sum(1, '2', 3.1));
    
?>
    

以上程序执行输出结果为:6

分析一下即:将字符串类型的'2'转换成整型的2,将float类型的3.1转换为整型的3后再相加,得出结果6。

严格模式

?php

declare(strict_types=1);


function sum(int ...$ints)
{
    
   return array_sum($ints);

}
    

print(sum(1, '2', 3.1));
    
?>
    

以上程序因为采用了严格模式,因为第二个参数不是int类型,执行结果报错如下:

PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……

返回类型声明

PHP7+ 增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型。

可以声明的返回类型有:

  • string
  • int
  • float
  • bool
  • interfaces
  • array
  • callable

我踩的坑

这里我还真趟过坑,在新版本的phpstorm中会根据返回值类型出现提示代码,引导添加返回类型声明,我就加上了。但是后面因为业务的变化或者代码优化只修改了返回值(比如之前返回的是array,修改后返回了int),却忘记了修改返回类型声明(毕竟习惯了PHP弱语言类型这么多年了...),这样是会抛出异常导致报错的,这就是我踩到的坑,小伙们们在使用过程中要注意。

思考

GO语言是不会出现我上面说的问题的, 因为如果返回值类型和返回类型声明是编译不通过的,编译的时候就会报错。

而PHP作为弱类型语言,虽然做了返回类型声明这种优化,但是语言执行前不需要我们编译,直接发布运行,也就不能做到go语言的“编译报警”了,PHP会在执行的时候直接抛出异常。

?php
declare(strict_types=1);


function returnIntValue(int $value): int
{
    
   return $value;

}
    

print(returnIntValue(5));
    
?>
    

以上程序执行输出结果为:5

返回类型声明错误示例

?php
declare(strict_types=1);


function returnIntValue(int $value): int
{
    
   return $value + 3.0;

}
    

print(returnIntValue(1));
    
?>
    

以上程序由于采用了严格模式,返回值必须是 int,但是计算结果是float,导致报错,执行输出结果为:Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

void 函数

注意:定义返回类型为 void 的函数不能有返回值,即使返回 null 也不行。

返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。

实例

?php
function exchange(&
    $left, &
$right) : void
{

    if ($left === $right) {
    
        return;

    }
    

    $tmp = $left;
    
    $left = $right;
    
    $right = $tmp;

}
    

$a = 1;
    
$b = 2;
    
var_dump(exchange($a, $b), $a, $b);
    

以上实例输出结果:

null int(2) int(1)


关于“PHP7+也支持类型声明了?有什么特性?”的内容就介绍到这,感谢各位的阅读,相信大家对PHP7+也支持类型声明了?有什么特性?已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

php

若转载请注明出处: PHP7+也支持类型声明了?有什么特性?
本文地址: https://pptw.com/jishu/651160.html
Python怎样清空列表数据?一文带你了解两种方法 Oracle数据库如何使用,有哪些基本知识要掌握

游客 回复需填写必要信息