Cum să apelezi o funcție doar o singură dată (variabilă cu scop global)

15 mar. 2012, 11:56:14
Vizualizări: 28.3K
Voturi: 5

Am încercat să găsesc cea mai eficientă modalitate de a utiliza funcțiile în WordPress.

Am o funcție mare și lentă big_slow_function() care ideal ar trebui rulată doar o singură dată. Dar am nevoie să folosesc valoarea boolean returnată de această funcție în toate fișierele temei mele (în header.php, page.php, sidebar.php, footer.php, loop-page.php, functions.php etc).

Mă întreb cum pot face acest lucru.

Am încercat să pun următorul cod în functions.php pentru a evita apelarea big_slow_function() mai mult de o dată:

global $my_important_boolean;

function $get_my_important_boolean()
{
    global $my_important_boolean;

    if ($my_important_boolean == NULL) // dacă big_slow_function() nu a fost încă rulată
        $my_important_boolean = big_slow_function();

    return $my_important_boolean;
}

Și apoi am pus cod similar în toate fișierele temei mele:

if ($get_my_important_boolean()) {
    // personalizează conținutul pentru utilizator
}

Dar big_slow_function() încă este executată de fiecare dată. Nu sunt sigur ce fac greșit și mi-a fost greu să găsesc documentație bună despre scopul variabilelor în WordPress. Poate ar trebui să transmit o referință/pointer către variabilă?

Orice ajutor cu această problemă este foarte apreciat deoarece mă lupt cu ea de ceva timp.

10
Comentarii

Închis votat ca off-topic. Aceasta este o întrebare despre PHP/programare generală, nu despre WordPress.

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

Scuze. Am crezut că problema avea legătură cu modul în care WordPress gestionează variabilele globale. M-am înșelat.

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

@ChipBennett Dacă votezi pentru închidere, atunci ar trebui să dai efectiv click pe linkul de vot.

kaiser kaiser
3 oct. 2012 16:24:15

@kaiser Nu sunt de acord. Un vot negativ indică faptul că întrebarea în sine este proastă/de calitate slabă. Un vot pentru închidere ca fiind off-topic indică pur și simplu că întrebarea ar trebui să fie în altă parte.

Chip Bennett Chip Bennett
3 oct. 2012 23:31:01

@ChipBennett Am scris vot de închidere, nu vot negativ... Nici asta n-am făcut, nu? :)

kaiser kaiser
4 oct. 2012 09:32:19

@kaiser da, de fapt, am făcut-o. :)

Chip Bennett Chip Bennett
5 oct. 2012 07:04:24

@ChipBennett Atunci avem o eroare. Pot vedea doar un singur vot de închidere și acesta este al meu.

kaiser kaiser
5 oct. 2012 11:02:25

@kaiser se pare că da. Observ același lucru.

Chip Bennett Chip Bennett
5 oct. 2012 22:02:10

@ChipBennet raportat

kaiser kaiser
6 oct. 2012 18:54:02
Arată celelalte 5 comentarii
Toate răspunsurile la întrebare 1
2
16
function my_big_function() {

    static $result;

    // Funcția a fost deja executată
    if ( $result !== null )
        return $result;

    // Multă muncă aici pentru a determina $result
    $result = 'orice';

    return $result;
}

Vezi și: https://stackoverflow.com/questions/6188994/static-keyword-inside-function

15 mar. 2012 14:39:46
Comentarii

Perfect. Exact ceea ce căutam. Mulțumesc mult, Geert.

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

Doar pentru a completa acest răspuns, și deoarece nu văd nicio referință la acest lucru în niciunul dintre comentarii, funcțiile PHP nu pot începe cu $ deoarece acesta este rezervat pentru $variables în PHP.

DaveyJake DaveyJake
19 mar. 2017 00:35:05