php7开启强类型模式
我们知道php是⼀种弱类型的编程语⾔,但是php7已经有所改变,可以⽀持代码开启强类型模式了,好消息。
php7开启强类型模式,这是php7相⽐之前版本效率提⾼的部分原因,先来看两个例⼦
⾸先
<?php
function sum($a,$b):float
{
return $a+$b;
}
var_dump(sum(1,2));
var_dump(sum(1,2.5));
>
输出结果为:
float(3) float(3.5)
然后加上强类型模式
<?php
define(strict_types=1);//注意这⼀句必须要放在第⼀⾏,⽽且顶格
function sum($a,$b):float
{
return $a+$b;
}
var_dump(sum(1,2));
var_dump(sum(1,2.5));
>
输出结果为:
float(3) float(3.5)
从这⾥好像看不出区别,因为int->float类型的转换是允许的。
咱们再看⼀个例⼦:
function sum(int $a,int $b):float
{
return $a+$b;
}
var_dump(sum(1,2));
var_dump(sum(1,2.5));
输出结果为:
float(3) float(3)
这是因为2.5被强制转化为int类型,值为2,1+2=3,结果也没有什么问题,但是⼀般来说这种隐式的转化太过于难理解,可能不是我们预期的结果。
所以我们加⼊强类型模式来看⼀下输出结果
,代码如下:
<?php
php8兼容php7吗declare(strict_types=1);
function sum(int $a,int $b):float
{
return $a+$b;
}
var_dump(sum(1,2));
var_dump(sum(1,2.5));
>
输出结果为:
float(3)
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, float given, called in
/home/www/learn.php on line 8 and defined in /home/www/learn.php:3 Stack trace: #0 /home/www/learn.php(8): sum(1, 2.5) #1 {main} thrown in /home/www/learn.php on line 3
这⾥可以看出,强类型模式⽣效了,sum(1,2.5)⼀句出错了,2.5因为不是int类型导致程序出现错误。
如果遇到这种情况,让我们通过捕获异常的⽅式来捕获这种错误
代码如下:
<?php
declare(strict_types=1);
function sum(int $a,int $b):float
{
return $a+$b;
}
try {
var_dump(sum(1,2));
var_dump(sum(1,2.5));
}
catch(TypeError $e) {
echo 'Error:'.$e->getMessage();
}
>
输出结果为:
float(3) Error:Argument 2 passed to sum() must be of the type integer, float given, called in /home/www/learn.php on line 9
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论