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;

}

ここに私の問題があります。スクリプトで関数を 3 回以上呼び出す場合は、出力を一方向にしたいのですが、関数を 2 回しか呼び出さない場合は、返されるテンプレートに反映する必要がある html の変更がいくつかあります。

では、この関数を変更して、呼び出しが 2 つしかないかどうかを判断するにはどうすればよいでしょうか。事後に戻って「ねえ、関数は 2 回しか実行されませんでしたか?」と尋ねることはできません。

2回目以降は使用されず、必要な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()「2回実行しましたか?」と尋ねています。

$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
}

関数が2回だけ呼び出されたかどうかを確認する唯一の方法は、コードの最後にテストを配置することです。しかし、おそらくそれまでにテンプレートにアクセスできなくなったのでしょうか。より多くのコードを見ずに多くを伝えることはできません。

于 2012-10-11T02:00:03.607 に答える