php - php echo函数不打印结果
问题描述
我有一个脚本来计算每天一张票的开放时间,但只计算我们开放的几个小时。功能的详细信息并不那么重要,但我已将其全部粘贴在这里,因为它可能是失败的原因。
继承人的功能:
function getTime($o, $now, $total) {
//One Day in seconds
$oneDay = 86400;
//One Business day (12 hours, 7am-7pm)
$oneBDay = 43200;
//Get the timestamp of 7am/7pm for time given
$sevenAM = mktime('7', '0', '0', m($o), d($o), y($o));
$sevenPM = mktime('19', '0', '0', m($o), d($o), y($o));
//If Ticket Start Time is before 7am, we only count from 7am after
if ($o < $sevenAM) {
$o = $sevenAM;
} else {
$o = $o;
}
//Debug to get today
$today = date('Y-m-d h:i:s a', $o);
//See if we are within the same business day
$diff = $now - $o;
//Debug
//echo $today.",".$timeSpent.",".$total."\n";
//If we are not within 1 business day, do this again
if ($diff > $oneBDay) {
//Total Time spent for the day
$timeSpent = $sevenPM - $o;
//Add todays time to total time
$total = $total + $timeSpent;
//Move to tomorrow
$o = $sevenAM + $oneDay;
getTime($o, $now, $total);
}
//If we are within 1 business day, count the time for today and return our result
if ($diff < $oneBDay) {
$time = $diff;
$total = $total + $time; //for example $total = 123456
return $total;
}
}
当我做
echo getTime($o,$now,0);
我希望看到 123456。但我什么也没打印。
该函数运行并且我知道总有一个值(我已将其静态设置为调试)。
--注意函数在需要时调用自身
附加功能:
function y($o){
$y = date('Y',$o);
return $y;
}
function m($o){
$m = date('m',$o);
return $m;
}
function d($o){
$d = date('d',$o);
return $d;
}
编辑:
如果我做 :
if ($diff < $oneBDay) {
$time = $diff;
$total = $total + $time; //for example $total = 123456
echo "My Total:".$total;
return $total;
}
我会看到我的总数:123456
解决方案
指出您的函数由于结构缺陷而难以调试并不是徒劳的。我建议您为您的函数创建一个单元测试,然后重构,以便您能够确保保留所需的行为。
也就是说,您的函数正在打印任何内容,因为它没有达到任何明确的return
指令。所以它返回null
。看看如果最后一个 if 没有命中,你将错过最后一次返回值的机会。
我不确定你的函数应该做什么,但是如果你递归调用它,你可能想要返回它的值,或者至少重新分配给一个变量。结帐。
<?php
function y($o){ $y = date('Y',$o); return $y; }
function m($o){ $m = date('m',$o); return $m; }
function d($o){ $d = date('d',$o); return $d; }
function getTime($o,$now,$total){
//One Day in seconds
$oneDay = 86400;
//One Business day (12 hours, 7am-7pm)
$oneBDay = 43200;
//Get the timestamp of 7am/7pm for time given
$sevenAM = mktime('7','0','0',m($o),d($o),y($o));
$sevenPM = mktime('19','0','0',m($o),d($o),y($o));
//If Ticket Start Time is before 7am, we only count from 7am after
if ($o < $sevenAM){
$o = $sevenAM;
}else{
$o = $o;
}
//Debug to get today
$today = date('Y-m-d h:i:s a',$o);
//See if we are within the same business day
$diff = $now - $o;
//Debug
//echo $today.",".$timeSpent.",".$total."\n";
//If we are not within 1 business day, do this again
if ($diff > $oneBDay){
//Total Time spent for the day
$timeSpent = $sevenPM - $o;
//Add todays time to total time
$total = $total+$timeSpent;
//Move to tomorrow
$o = $sevenAM+$oneDay;
return getTime($o,$now,$total); // LOOKS LIKE YOU WANT TO RETURN VALUE HERE
}
//If we are within 1 business day, count the time for today and return our result
if($diff < $oneBDay){
$time = $diff;
$total = $total+$time; // FIXED MISSING SEMICOLON HERE TO AVOID SYNTAX ERROR
return $total;
}
}
$test = getTime(1534964212, date('U'), 0);
echo "$test"; // 144885
?>
推荐阅读
- ruby-on-rails - 错误-'未定义的局部变量或方法'arams'',但我的代码中没有arams
- java - 为什么我没有初始化局部变量“计时器”?
- php - Sort PHP array through another array which specifies the sort order by value (values are not keys in first array)
- asp.net - Asp 核心不强制执行客户端证书
- powershell - 如何编写多个结果以在 Powershell 中弹出
- getstream-io - 通过 rest api 或 php sdk 设置 getstream.io 通知提要的读取状态
- laravel - 将模型数据传递给 JavaScript 函数
- asp.net - Identity 如何在项目模板中使用 ASP.NET Core MVC 3.1 的个人用户帐户工作?
- javascript - 如何使用 animate.css 动画平滑交换两个元素(弹回旧元素,弹回新元素)
- javascript - 有没有办法可以从左声道或右声道播放视频音频?