php7 断言,探索PHP7之一:数据类型的强制、严格模式

本文介绍了PHP7引入的强类型和严格模式,强调了PHP7在性能和内存消耗上的提升,以及如何通过`declare(strict_types=1);`启用严格模式。在严格模式下,函数参数和返回值的类型检查变得严格,不匹配的数据类型会导致致命错误。此外,文章还提及了PHP7的其他改进,如新的安全随机数生成器和废弃旧的API与扩展。
摘要由CSDN通过智能技术生成

探索PHP7之一:数据类型的强制、严格模式

6cd5e4fd49658da7be73f2e8e3760c00.png

2年前

阅读 4609

评论 0

喜欢 0

### 0、前言,PHP7的一些介绍

众所周知,PHP是一门弱类型语言,实际上PHP在5.*版本时,也是支持伪强类型的。

为什么说是伪强类型呢,那是因为那时候的强类型,不过是使用函数强制转换类型,并不依赖HHVM转码。

而PHP7后,PHP迎来了真正的强类型模式与严格类型模式。

PHP7有加入几十个功能,最显著的是下面提到 -

1、改进的性能 - PHPNG代码合并在PHP7中,这是比 PHP5快两倍;

2、降低内存消耗 - 优化后PHP7使用较少的资源;

3、标量类型声明 - 现在,参数和返回值类型可以被强制执行;

4、一致性的64位支持 - 64位架构机器持续支持;

5、改进异常层次结构 - 异常层次结构得到改善;

6、许多致命错误转换成异常 - 异常的范围增大覆盖为许多致命的错误转化异常;

7、安全随机数发生器 - 加入新的安全随机数生成器的API;

8、已过时的API和扩展删除 - 不同的旧的和不支持的应用程序和扩展,从最新的版本中删除;

9、null合并运算符(??)的新空合并运算符被加入;

10、返回和标量类型声明支持返回类型和参数类型也被加入;

11、增加了对匿名匿名类的支持;

12、零成本声明支持零成本加入断言。

### 1、什么是强制模式?

例如下面的代码:

```

function demo1 (int $num) {

echo $num;

}

demo1(4.1);

```

你觉得会输出什么呢?

实际上,PHP7通过HHVM字节码,将小数强制转换成了整数,跟php5.*不同的是,前置用的是函数转换,后者用的是字节码转换。

### 2、什么是严格模式?

严格模式早在类似Java这样的编程语言中早已使用了,总体来说,就是强制效验变量的传参类型。

我们在代码中,通过使用

`declare(strict_types=1);`

开启严格模式;

`1`:表示严格类型效验模式,作用于函数调用和返回语句;

`0`:表示弱列席效验模式。

PHP7支持的类型限制分别有:

1、字符串(string),

2、整数 (int),

3、浮点数 (float),

4、布尔值 (bool)

5、接口(interfaces)

6、类(类名)

7、数组(array)

8、回调(callable)

接下来,我们将上面的函数改写严格模式进行测试:

```

declare(strict_types=1);

function demo2(int $num) {

echo $num;

}

demo2(4.1);

```

我们就会得到

`Fatal error: Uncaught TypeError: Argument 1 passed to demo2() must be of the type integer, float given, called in`

的错误提示,就跟Java一样,我们大PHP也正式支持严格数据类型啦。

同时注意,严格模式只支持 函数调用和返回语句,所以下面的模式,还是会沿用PHP5.*的函数强行转换。

```

declare(strict_types=1);

$num = 4.1;

$demo3 = (int)$num;

echo $demo3;

```

而且同学们注意,在PHP7中使用严格模式下的强类型限制,可以提供PHP的解析性能哦,不同的可以百度下HHVM字节码的解析原理。

同时,`declare(strict_types=1);`,必须放置在`<?php `的下一行,再它之前,不能有其他的代码或输出。

© 著作权归作者所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值