版权声明: https://blog.csdn.net/shi_yi_fei/article/details/52006809

我们知道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
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

最新文章

  1. 理清JavaScript正则表达式--上篇
  2. VS 常用快捷键
  3. LeetCode:Merge k Sorted Lists
  4. C++内存泄露之野指针
  5. 【原】无规矩,不方圆——说一说正则里的exec()和test()
  6. DSOFramerControl简单使用
  7. 如何用Jquery判断在键盘上敲的哪个按键
  8. oracle10g在rh6上安装缺少libXtst*的包导致不能出OUI
  9. p364习题1
  10. springday03-go2
  11. xla_events
  12. linux服务之rsyslog
  13. centOS学习part3:远程工具VNC的安装与配置
  14. 杂题 SPOJ MOBILE2 - Mobiles
  15. Android的init过程详解(一)(转)
  16. strcpy与memcpy的区别
  17. 大数据除法(Large data division)
  18. re模块的结果小练习题
  19. HBase学习——4.HBase过滤器
  20. 第41章 CORS - Identity Server 4 中文文档(v1.0.0)

热门文章

  1. css选择器之间的 空格和逗号
  2. ims注册与注销
  3. Eclips安装STS(Spring Tool Suite (STS) for Eclipse)插件
  4. java笔试之字符逆序(二)
  5. .Global.asax.cs中的方法的含义
  6. Echart使用过的属性总结
  7. React require(“history”).createBrowserHistory` instead of `require(“history/createBrowserHistory”)
  8. Clover config.plist Boot部分
  9. ThreadLocal简析
  10. 移动端自定义输入框的vue组件 ----input