Come chiamare una funzione una sola volta (ambito variabile globale)

15 mar 2012, 11:56:14
Visualizzazioni: 28.3K
Voti: 5

Sto cercando di capire il modo più efficiente per utilizzare le funzioni in WordPress.

Ho una funzione lenta e pesante big_slow_function() che idealmente dovrebbe essere eseguita una sola volta. Tuttavia ho bisogno di utilizzare il valore booleano restituito da questa funzione in tutti i file del mio tema (in header.php, page.php, sidebar.php, footer.php, loop-page.php, functions.php ecc).

Mi sto chiedendo come fare questo.

Ho provato a inserire questo codice nel mio functions.php per evitare di chiamare big_slow_function() più di una volta:

global $my_important_boolean;

function get_my_important_boolean()
{
    global $my_important_boolean;

    if ($my_important_boolean == NULL) // se big_slow_function() non è stata ancora eseguita
        $my_important_boolean = big_slow_function();

    return $my_important_boolean;
}

E poi ho inserito codice come questo in tutti i file del mio tema:

if (get_my_important_boolean()) {
    // personalizza contenuto per l'utente
}

Ma big_slow_function() viene ancora eseguita ogni volta. Non sono sicuro di cosa sto sbagliando e ho trovato difficile trovare una buona documentazione sull'ambito delle variabili in WordPress. Forse ho bisogno di passare un riferimento/puntatore alla variabile?

Qualsiasi aiuto con questo problema è molto apprezzato dato che ci sto lottando da un po' di tempo.

10
Commenti

Chiuso come fuori tema. Questa è una domanda su PHP/programmazione generale, non una domanda su WordPress.

Chip Bennett Chip Bennett
15 mar 2012 14:53:53

Mi scuso. Pensavo che il problema riguardasse il modo in cui WordPress gestisce le variabili globali. Mi sbagliavo.

Ben Pearson Ben Pearson
16 mar 2012 07:21:25

@ChipBennett Se voti per chiudere, allora dovresti effettivamente fare clic sul link per votare.

kaiser kaiser
3 ott 2012 16:24:15

@kaiser Non sono d'accordo. Un voto negativo indica che la domanda stessa è di bassa qualità. Un voto per chiudere perché fuori tema semplicemente segnala che la domanda appartiene a un altro contesto.

Chip Bennett Chip Bennett
3 ott 2012 23:31:01

@ChipBennett Ho scritto voto per chiudere, non voto negativo... Non l'ho fatto neanche quello, vero? :)

kaiser kaiser
4 ott 2012 09:32:19

@kaiser in realtà, sì, l'ho fatto. :)

Chip Bennett Chip Bennett
5 ott 2012 07:04:24

@ChipBennett Allora abbiamo un bug. Posso vedere solo un voto di chiusura ed è il mio.

kaiser kaiser
5 ott 2012 11:02:25

@kaiser A quanto pare sì. Osservo la stessa cosa.

Chip Bennett Chip Bennett
5 ott 2012 22:02:10

@ChipBennet segnalato

kaiser kaiser
6 ott 2012 18:54:02
Mostra i restanti 5 commenti
Tutte le risposte alla domanda 1
2
16
function my_big_function() {

    static $result;

    // La funzione è già stata eseguita
    if ( $result !== null )
        return $result;

    // Molto lavoro qui per determinare $result
    $result = 'qualunque_cosa';

    return $result;
}

Vedi anche: https://stackoverflow.com/questions/6188994/static-keyword-inside-function

15 mar 2012 14:39:46
Commenti

Perfetto. Esattamente quello che stavo cercando. Molto apprezzato, Geert.

Ben Pearson Ben Pearson
16 mar 2012 07:19:07

Giusto per completare questa risposta, e anche perché non vedo alcun riferimento a questo in nessuno dei commenti, le funzioni di PHP non possono iniziare con $ poiché è riservato per le $variabili in PHP.

DaveyJake DaveyJake
19 mar 2017 00:35:05