调用函数时计算值

时间:2018-05-04 14:59:00

标签: php

我需要一些帮助,因为我是新手。我正在处理一个函数来添加从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的值加起来?

4 个答案:

答案 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可以将该函数重用于另一个实现。