1

我有一个函数,它接受一个输入变量并通过以下调用输出一个模板:

outputhtml($blue_widget);
outputhtml($red_widget);
outputhtml($green_widget);

以及该功能的简化版本:

function outputhtml($type)
{

    static $current;
    if (isset($current))
    {
        $current++;
    }
    else
    {
        $current = 0;
    }

//some logic here to determine template to output

return $widget_template;

}

现在这是我的问题。如果我在脚本中调用该函数三次或更多次,我希望输出是一种方式,但如果我只调用该函数两次,那么我有一些 html 更改需要反映在返回的模板中。

那么我如何修改这个函数来确定它是否只有两个调用。事后我不能回去问“嘿功能你只运行了两次吗?”

我很难理解如何告诉一个函数在第二次之后它不会被使用,并且可以使用必要的 html 修改。我将如何实现这一目标?

4

2 回答 2

5
function outputhtml($type)
{
    static $current = 0;
    $current++;

    //some logic here to determine template to output
    if ($current === 2) {
       // called twice
    }

    if ($current > 2) {
       // called more than twice
    }
    return $widget_template;

}
于 2012-10-11T01:56:43.587 回答
1

static $current使用内部函数是不切实际的;我建议使用对象来维护状态,如下所示:

class Something
{
    private $current = 0;

    function outputhtml($type)
    {
        // ... whatever
        ++$this->current;
        return $template;
    }

    function didRunTwice()
    {
        return $this->current == 2;
    }
}

didRunTwice()方法是询问“你跑了两次吗?”。

$s = new Something;
$tpl = $s->outputhtml(1);
// some other code here
$tpl2 = $s->outputhtml(2);
// some other code here
if ($s->didRunTwice()) {
    // do stuff with $tpl and $tpl2
}

找出一个函数是否只被调用两次的唯一方法是将测试放在代码的末尾;但也许到那时模板不再可访问?如果没有看到更多代码,就不能说太多。

于 2012-10-11T02:00:03.607 回答