Php 避免零除错误Laravel框架
我试图在我的Laravel站点上计算一些统计数据…但是当我执行以下代码时,它会给我一个“除以零的错误” 我理解为什么,因为没有记录,所以计算是0除以0 有没有一种方法,如果它等于零,则回显“0”,而不是抛出该错误 控制器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
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仅限于您自己 这样做
这里有一个简单的方法。 我没有在每次除法操作之前使用条件子句来测试零值,而是在整个应用程序中使用自定义帮助程序来全局执行此操作,并捕获被零除法。这样,如果我在使用除法的每个地方都有正确的筛选代码,我就不必担心,而且我可以在全局范围内轻松地关闭或打开除法进行调试。这比你想象的要容易得多 创建一个空白文件,在该文件中,您将拥有在整个应用程序中普遍可用的自定义函数,并将其命名为
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