web-dev-qa-db-fra.com

Comment appeler une fonction une seule fois

J'ai essayé de trouver le moyen le plus efficace d'utiliser des fonctions dans WordPress.

J'ai une grosse fonction lente big_slow_function () idéalement exécutée une seule fois. Mais je dois utiliser le booléen renvoyé par cette fonction dans tous mes fichiers de thème (dans header.php, page.php, sidebar.php, footer.php, loop-page.php, functions.php, etc.).

Je me demande comment faire cela.

J'ai essayé de mettre cela dans mon functions.php pour éviter d'appeler big_slow_function () plus d'une fois:

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

Et puis je mets un code comme celui-ci dans mes fichiers de thème:

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

Mais la fonction big_slow_function () est toujours exécutée à chaque fois. Je ne suis pas sûr de ce que je fais de travers et j'ai eu du mal à trouver une bonne documentation sur la portée variable dans WordPress. Peut-être dois-je passer une référence/un pointeur à la variable?

Toute aide relative à ce problème est très appréciée, car je me bats depuis un moment.

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

Voir aussi: https://stackoverflow.com/questions/6188994/static-keyword-inside-function

13
Geert