【问题标题】:@ division by 0 returns fatal in PHP 8@ 除以 0 在 PHP 8 中返回致命
【发布时间】:2022-08-12 13:10:44
【问题描述】:

在 PHP 7 中,它返回 INF,这没问题,但在 PHP 8 之后,它返回一个致命错误。

<?php
$a = 2;
$b = 0;
$c = @($a / $b);
echo $c;
echo \"\\n\";
?>

无论如何也要让 PHP 8 返回 INF 吗?我有一个脚本,其中有 100 个可能的除以零 - 如果条件我不能添加 100,我需要 @suppress 来处理它。

    标签: divide-by-zero php-8


    【解决方案1】:
    <?php
    try {
        echo (2 / 0);
    } catch (DivisionByZeroError $e) {
        return INF;
    }
    

    【讨论】:

    • 有 45 个地方我必须这样做。我认为用 fdiv 替换有效吗?
    【解决方案2】:

    如果您依赖除以 0 返回的值,这是隐藏的制动更改之一。

    一般来说,用户@Alister Bulman 已经给了你想要的答案。 也很高兴知道除以 0 是如何与不同的 PHP 版本一起工作的。

    考虑以下示例:

    <?php
    
    echo "--- 2 / 0 ---". PHP_EOL;
    try{
        $res = 2 / 0;
    }catch(DivisionByZeroError $e){
        echo " ### Caught 2 / 0! ". $e->getMessage() . PHP_EOL;
        $res = "nothing returned - error thrown!";
    }
    echo "RETURNS: ";
    var_dump($res);
    echo " ### Continue script" . PHP_EOL;
    echo PHP_EOL;
    
    echo "--- intdiv(2, 0) ---". PHP_EOL;
    try{
        $res = intdiv(2, 0);
    }catch(DivisionByZeroError $e){
        echo " ### Caught intdiv(2, 0)!". $e->getMessage() . PHP_EOL;
        $res = "nothing returned - error thrown!";
    }
    echo "RETURNS: ";
    var_dump($res);
    echo " ### Continue script" . PHP_EOL;
    

    根据 PHP 版本,它的行为和返回不同的值。请参阅下面的 php8、php7 和 php5 示例。

    PHP8 / 0 将返回 (没有什么- DivisionByZeroError 抛出):

    --- 2 / 0 ---
    ### 抓到 2 / 0!被零除
    返回:字符串(32)“没有返回 - 抛出错误!”
    ### 继续脚本

    --- intdiv(2, 0) ---
    ### 捕获 intdiv(2, 0)! 被零除
    返回:字符串(32)“没有返回 - 抛出错误!”
    ### 继续脚本

    PHP7 / 0 将返回 INF
    intdiv()返回(没有什么- DivisionByZeroError 抛出):

    --- 2 / 0 ---
    警告:第 5 行 /home/user/scripts/code.php 中除以零
    返回:浮动(INF)
    ### 继续脚本

    --- intdiv(2, 0) ---
    ### 捕获 intdiv(2, 0) !除以零
    返回:字符串(32)“没有返回 - 抛出错误!”
    ### 继续脚本

    PHP5 / 0 将返回 FALSE

    --- 2 / 0 ---
    警告:第 5 行 /home/user/scripts/code.php 中除以零
    返回:布尔(假)
    ### 继续脚本

    --- intdiv(2, 0) ---
    致命错误:在第 17 行的 /home/user/scripts/code.php 中调用未定义函数 intdiv()

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多