Cómo llamar a una función solo una vez (ámbito de variable global)

15 mar 2012, 11:56:14
Vistas: 28.3K
Votos: 5

He estado tratando de encontrar la forma más eficiente de usar funciones en WordPress.

Tengo una función lenta big_slow_function() que idealmente solo debería ejecutarse una vez. Pero necesito usar el valor booleano que devuelve esta función a través de los archivos de mi tema (en header.php, page.php, sidebar.php, footer.php, loop-page.php, functions.php etc).

Me pregunto cómo hacer esto.

Intenté poner esto en mi functions.php para tratar de evitar llamar a big_slow_function() más de una vez:

global $my_important_boolean;

function $get_my_important_boolean()
{
    global $my_important_boolean;

    if ($my_important_boolean == NULL) // si big_slow_function() no se ha ejecutado aún
        $my_important_boolean = big_slow_function();

    return $my_important_boolean;
}

Y luego puse código como este a través de mis archivos del tema:

if ($get_my_important_boolean()) {
    // personalizar contenido para el usuario
}

Pero big_slow_function() todavía se está ejecutando cada vez. No estoy seguro de qué estoy haciendo mal y me ha resultado difícil encontrar buena documentación sobre el ámbito de variables en WordPress. Tal vez necesite pasar una referencia/puntero a la variable.

Cualquier ayuda con este problema es muy apreciada ya que he estado luchando con esto durante algún tiempo.

10
Comentarios

Cerrado por votación como fuera de tema. Esta es una pregunta sobre PHP/programación general, no una pregunta sobre WordPress.

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

Mis disculpas. Pensé que el problema tenía que ver con la forma en que WordPress maneja las variables globales. Estaba equivocado.

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

@ChipBennett Si votas para cerrar, entonces deberías hacer clic en el enlace de votación.

kaiser kaiser
3 oct 2012 16:24:15

@kaiser No estoy de acuerdo. Un voto negativo indica que la pregunta en sí es mala/de baja calidad. Un voto para cerrar por estar fuera de tema simplemente indica que la pregunta pertenece a otro lugar.

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

@ChipBennett Escribí voto para cerrar, no voto negativo... Tampoco hice eso, ¿verdad? :)

kaiser kaiser
4 oct 2012 09:32:19

@kaiser sí, de hecho, lo hice. :)

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

@ChipBennett Entonces tenemos un error. Solo puedo ver un voto de cierre y es el mío.

kaiser kaiser
5 oct 2012 11:02:25

@kaiser al parecer sí. Observo lo mismo.

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

@ChipBennet reportado

kaiser kaiser
6 oct 2012 18:54:02
Mostrar los 5 comentarios restantes
Todas las respuestas a la pregunta 1
2
16
function my_big_function() {

    static $result;

    // La función ya se ejecutó
    if ( $result !== null )
        return $result;

    // Mucho trabajo aquí para determinar $result
    $result = 'lo_que_sea';

    return $result;
}

Ver también: https://stackoverflow.com/questions/6188994/static-keyword-inside-function

15 mar 2012 14:39:46
Comentarios

Perfecto. Exactamente lo que estaba buscando. Muchas gracias, Geert.

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

Solo para complementar esta respuesta, y también porque no veo ninguna referencia a esto en ninguno de los comentarios, las funciones de PHP no pueden comenzar con $ ya que eso está reservado para las $variables en PHP.

DaveyJake DaveyJake
19 mar 2017 00:35:05