Php 避免零除错误Laravel框架

Php 避免零除错误Laravel框架,php,laravel,laravel-5,Php,Laravel,Laravel 5,我试图在我的Laravel站点上计算一些统计数据…但是当我执行以下代码时,它会给我一个“除以零的错误” 我理解为什么,因为没有记录,所以计算是0除以0 有没有一种方法,如果它等于零,则回显“0”,而不是抛出该错误 控制器 private function getAverageOddsForLastMonth() { $firstDayOfLastMonth = new Carbon('first day of last month'); $lastDayOfLastMon

我试图在我的Laravel站点上计算一些统计数据…但是当我执行以下代码时,它会给我一个“除以零的错误”

我理解为什么,因为没有记录,所以计算是0除以0

有没有一种方法,如果它等于零,则回显“0”,而不是抛出该错误

控制器

    private function getAverageOddsForLastMonth()
{
    $firstDayOfLastMonth = new Carbon('first day of last month');
    $lastDayOfLastMonth = new Carbon('last day of last month');

    $tipslastmonth = Tip::whereBetween('tip_date',
        [
            $firstDayOfLastMonth,
            $lastDayOfLastMonth
        ]
    )->count();

    $sumOfTheOddsLastMonth = Tip::whereBetween('tip_date',
        [
            $firstDayOfLastMonth,
            $lastDayOfLastMonth
        ]
    )->sum('odds');

    return ($sumOfTheOddsLastMonth / $tipslastmonth);
}

只需添加一个简单的条件:

return $tipslastmonth == 0 ? 0 : ($sumOfTheOddsLastMonth / $tipslastmonth);
  • 如您所知,发生此错误的原因是变量中的0仅限于您自己 这样做
  • 当0不出现时,其他部分将被执行,与我的项目配合良好

  • 这里有一个简单的方法。

    我没有在每次除法操作之前使用条件子句来测试零值,而是在整个应用程序中使用自定义帮助程序来全局执行此操作,并捕获被零除法。这样,如果我在使用除法的每个地方都有正确的筛选代码,我就不必担心,而且我可以在全局范围内轻松地关闭或打开除法进行调试。这比你想象的要容易得多

    创建一个空白文件,在该文件中,您将拥有在整个应用程序中普遍可用的自定义函数,并将其命名为
    helpers.php
    。我把我的放在
    app/Helpers/Helpers.php
    中,但很多人把他们的放在
    app/Helpers.php
    app/Http/Helpers.php
    中。只要在
    composer.json
    autoload部分正确地列出它(显示我的位置),这并不重要:

    这只是确保您的通用助手功能已预加载,并可在整个应用程序中使用。保存
    composer.json
    后,在命令行终端中执行
    composer dump autoload
    ,以进行设置

    在新的空白
    helpers.php
    文件中,只需添加以下内容:

    <?php
    
    if (! function_exists('divnum')) {
    
            function divnum($numerator, $denominator)
            {
                return $denominator == 0 ? 0 : ($numerator / $denominator);
            }
    
        }
    
    示例:

    $answer = divnum($number1, $number2);
    
    $answer = divnum(20,5);  //sets $answer variable to 4
    
    $answer = divnum(20,0);  //sets $answer variable to 0 
    
    那么,在哪里可以得到一个零除误差,如下所示:

    $number1 = 2300;
    $number2 = 0;
    $answer = $number1/$number2;  //Your app crashes as you're dividing by zero
    
    以下是您在整个应用程序中的操作方式:

    $number1 = 2300;
    $number2 = 0;
    $answer = divnum($number1,$number2);  //Your app continues without error and $answer as zero
    

    一旦您设置了这个简单的帮助器,此后的编码差异可以忽略不计,您再也不用担心被零除了。

    谢谢Kjartan改进了我的答案
    $number1 = 2300;
    $number2 = 0;
    $answer = $number1/$number2;  //Your app crashes as you're dividing by zero
    
    $number1 = 2300;
    $number2 = 0;
    $answer = divnum($number1,$number2);  //Your app continues without error and $answer as zero