PHP静态变量,需要帮助计算函数

时间:2012-10-11 01:52:29

标签: php

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

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更改需要反映在返回的模板中。< / p>

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

无法理解我如何告诉函数它在第二次之后不会被使用并且可以使用必要的html修改。我将如何完成这项工作?

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分: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
}

唯一可以确定函数是否只被调用两次的方法是将测试放在代码的末尾;但也许到那时模板不再可访问?没有看到更多代码就说不清楚。