加入收藏 | 设为首页 | 会员中心 | 我要投稿 揭阳站长网 (https://www.0663zz.cn/)- 机器学习、行业智能、决策智能、云计算、AI应用!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP7+也支持类型声明了,聊聊这个特性!

发布时间:2022-08-10 11:29:20 所属栏目:PHP教程 来源:互联网
导读:最近在研究PHP7的新特性,发现PHP也开始搞类型声明了,这么做的好处很明显:能提高程序运行速度。 下面开始介绍这一新特性: 默认情况下,所有的PHP文件都处于弱类型校验模式。 PHP7+增加了类型声明的特性,类型声明有两种模式: 强制模式 (默认模式) 我的理
  最近在研究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 语句。

(编辑:揭阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读