我需要一些帮助,因为我是新手。我正在处理一个函数来添加从0到6开始的日期值。我想计算每天的值,这样我就可以连接到每一天的每个url,但是在我的代码中它只会显示值每天为0。
以下是代码:
2018-05-04 (Friday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-05 (Saturday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-06 (Sunday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-07 (Monday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-08 (Tuesday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-09 (Wednesday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-10 (Thursday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
输出:
2018-05-04 (Friday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=0
2018-05-05 (Saturday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=1
2018-05-06 (Sunday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=2
2018-05-07 (Monday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=3
2018-05-08 (Tuesday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=4
2018-05-09 (Wednesday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=5
2018-05-10 (Thursday)
http://example.com/api/GS?cid=44630&offset=+00.00&day=6
这是我想要实现的目标:
@Transactional(propagation = Propagation.REQUIRES_NEW
你能告诉我一个例子,当我调用一个函数时,如何将每天从0到6的值加起来?
答案 0 :(得分:1)
在函数内部,变量只有本地范围,除非您另有明确说明。
$day = 0;
function get_shows($channel_id, DateTime $dt, $duration=1440, $skip_finished = true)
{
global $day;
$url = 'http://example.comapi/GS?cid=' . $channel_id . '&offset=+00.00&day=' .$day++;
echo $url;
// don't need this either as you've already post incremented $day
// $day++;
}
正如其他人所说,使用全局变量并不是一种好的技术,你应该将$day
传递给方法。
答案 1 :(得分:0)
通过在函数中添加global $day
来使用存在的全局:
function get_shows($channel_id, DateTime $dt, $duration=1440, $skip_finished = true)
{
global $day;
$url = 'http://example.comapi/GS?cid='.$channel_id.'&offset=+00.00&day='.$day;
echo $url;
}
同样删除$day
的增量,因为它们不需要,你已经在循环中完成了这个。或者添加一个额外的参数并将$day
传递给您的函数并使用:
get_shows($channel_id, DateTime $dt, $day, $duration=1440, $skip_finished = true)
答案 2 :(得分:0)
将$day
作为参数传递给函数。你已经在它上面循环但没有使用它。您的另一个选择是将变量声明为函数体both of which are not sensible choices中的全局变量或静态变量。
更改
function get_shows($channel_id, DateTime $dt, $duration=1440, $skip_finished = true)
到
function get_shows($channel_id, DateTime $dt, $day, $duration=1440, $skip_finished = true);
并使用
调用它get_shows($channel_id, $dt, $day, $duration)
你不需要在函数和循环中增加变量 - 让函数根据传递给它的参数做一件事。
答案 3 :(得分:0)
答案是:范围!
您正在尝试访问函数外部存在的变量,这在PHP中不起作用。每次调用$ day ++时,$ day都不存在,因此PHP会尝试使用值0初始化它。这就是为什么每个url都有day = 0的原因。
不建议使用“global”关键字,因为它最终会导致代码非常混乱,这很难调试。
我推荐这样的东西(简化版):
function getShowUrl($channel_id, $day)
{
return 'http://example.comapi/GS?cid=' . $channel_id . '&offset=+00.00&day=' .$day;
}
for($day = 0; $day < 7; $day++) {
echo getShowUrl($channel_id,$day);
}
通常不建议在函数内使用echo。使用return可以将该函数重用于另一个实现。