探索PHP7之一:数据类型的强制、严格模式
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 `的下一行,再它之前,不能有其他的代码或输出。
© 著作权归作者所有