web-dev-qa-db-ja.com

関数を一度だけ呼び出す方法(グローバル変数スコープ)

私はWordPressで関数を使う最も効果的な方法を考え出そうとしてきました。

私は理想的には一度だけ実行される大きな遅い関数big_slow_function()を持っています。しかし、私はテーマファイルを通してこの関数によって返されるブール値を使う必要があります(header.php、page.php、sidebar.php、footer.php、loop-page.php、functions.phpなど)。

私はこれをどうやってするのかと思っています。

これを自分のfunctions.phpに入れて、big_slow_function()を2回以上呼び出さないようにしました。

global $my_important_boolean;

function $get_my_important_boolean()
{
    global $my_important_boolean;

    if ($my_important_boolean == NULL) // if big_slow_function() has not been run yet
        $my_important_boolean = big_slow_function();

    return $my_important_boolean;
}

それから私はテーマファイルの中にこのようなコードを置きます。

if ($get_my_important_boolean()) {
    // customize content to user
}

しかし、big_slow_function()はまだ毎回実行されています。私が間違っていることがわからないし、WordPressで変数の範囲に関する良い文書を見つけるのが難しいことがわかりました。おそらく、変数への参照/ポインタを渡す必要がありますか?

私はしばらくの間それに苦労してきたので、この問題を手伝っていただければ幸いです。

4
Ben Pearson
function my_big_function() {

    static $result;

    // Function has already run
    if ( $result !== null )
        return $result;

    // Lot of work here to determine $result
    $result = 'whatever';

    return $result;
}

また見なさい: https://stackoverflow.com/questions/6188994/static-keyword-inside-function

13
Geert