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、程序流程图的作用程序流程图的作用程序流程图

    2022年8月5日
    8
  • SqlSessionFactory配置

    SqlSessionFactory配置SqlSessionFactory配置<transactionManagertype=”jdbc”>//typejdbc依赖jdbc实现事务控制manage本身对事务不做任何控制,交给外部容器//后端数据库源<dataSourcetype=”POOLDE”> <propertyname=”driver”value=””/> &…

    2022年6月5日
    192
  • python学习笔记 day22 面向对象(一)

    python学习笔记 day22 面向对象(一)1.人狗大战一个简单的小例子,定义一个Person(类)里面有人的很多属性,比如名字,性别,血量。攻击力,然后定义一个Dog(类),里面设置狗的很多属性,名字,血量,攻击力,种类等,然后又定义了两

    2022年7月6日
    15
  • 数据归一化处理transforms.Normalize()

    数据归一化处理transforms.Normalize()数据归一化处理transforms.Normalize()1.图像预处理Transforms(主要讲解数据标准化)1.1理解torchvisiontransforms属于torchvision模块的方法,它是常见的图像预处理的方法在这里贴上别人整理的transforms运行机制:可以看出torchvision工具包中包含三个主要模块,主要讲解学习transformstorchvision.transforms:常用的数据预处理方法,提升泛化能力包括:数据中心化、数据标准化、缩放、裁剪、旋

    2022年6月23日
    115
  • latex换行不缩进

    latex换行不缩进缩进哪段就直接放在段首\noindent

    2022年5月14日
    43
  • pve安装docker图形化_怎么安装docker

    pve安装docker图形化_怎么安装docker基本相当于转载,但我光贴图也不行啊,还是把步骤加上去年年底这NUC到手时,就装PVE练手,然而最后做主力挂机的是那会买的个1037U小主机当时就尝试过装LibreELEC,结果是接显示器黑屏不过后来我直接在宿主机上装桌面和Kodi,但是吧那源里的Kodi是17的对于x265是软解。。。怎么装当然是看的值得买上的这个人家是OMV咱这是PVE都是装桌面再装KODI,但是为了保持纯净的PVE所以才想直通…

    2025年6月23日
    0

发表回复

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

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