php7开启强类型模式

php7开启强类型模式

版权声明: 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112755.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电脑鼠标能动但点什么都没反应_联想台式机鼠标键盘没反应

    电脑鼠标能动但点什么都没反应_联想台式机鼠标键盘没反应1.联想电脑鼠标盘没反应是怎么回事1.打开笔记本电脑,没有任何提示,但触摸板触摸完全没有反应。这时候要确保触摸屏不是锁上了,触摸屏锁上了就会完全没有反应,这个解决办法很简单,笔记本一般按住Fn(功能键)+F6(不同的笔记本不同的按键,按键上有触摸板图像)即可解锁。有些笔记本有独立的触摸屏开锁键,注意看看哪个键有个小键盘在上面的即可。2.软件问题主要说的是驱动出现问题,例如刚刚重新安装过电脑…

    2022年9月14日
  • phpstrom 激活码【2021.10最新】

    (phpstrom 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月29日
  • Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    2021年10月4日
  • plsql截取字符串_oracle截取字符串长度

    plsql截取字符串_oracle截取字符串长度oracle截取字符(substr),检索字符位置(instr)casewhenthenelseend语句使用收藏常用函数:substr和instr1.SUBSTR(string,start_position,[length])求子字符串,返回字符串解释:string元字符串start_position开始位置(从0开始)length可选项,子字符串的个数Fore…

    2022年11月1日
  • VB学习记录[通俗易懂]

    VB学习记录[通俗易懂]一、什么是VBVB程序设计是要干什么?1.添加、设置对象;2.对对象添加功能。编程的基本要素-对象object-类class-属性property-方法method-事件event事件过程的一般格式:privatesub对象名称_事件名称()……事件响应程序代码……En…

    2022年6月21日
  • vim复制粘贴_vim剪切命令

    vim复制粘贴_vim剪切命令在Windows下我们习惯的操作,复制单个字符,复制单行多行,删除单行多行,在linux的vim中操作如下:G(shift+g+g):跳到文档尾g+g:跳转到文档首home键:光标移动到行首end键:光标移动到行尾yy:复制光标所在行的整行内容yw:复制光标所在单词的内容nyy:复制从光标开始向下的n行内容,n为复制的行数nyw:复制从光标所在字开始后的n个字,n为复制的字数p:粘贴,将复制的内容粘贴在光标所在的位置x(小x):删除光标所在位置的字符,同键盘上的del

    2022年9月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号