zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    逆向入门之路1 关于逆向工程
    EC笔记:第三部分:14、在资源管理类中小心Copying行为
    vuex最简单、最详细的入门文档
    前端加密的几种常见方式
    NAS星云链 入门之从零开发第一个DAPP
    chrome 不支持12px以下字体为题的解决
    input checkbox 多选 验证
    你对javascript的原生操作或者工具了解多少呢?
    ionic2-键盘覆盖输入框和返回键问题解决方案
    ionic2 手风琴效果
  • 原文地址:https://www.cnblogs.com/lxwphp/p/9863714.html
Copyright © 2011-2022 走看看