Utilizzo di variabili globali all'interno del plugin

27 set 2013, 02:42:17
Visualizzazioni: 21.1K
Voti: 2

Sto creando il mio primo plugin e mi sono trovato a dover richiamare le stesse variabili di opzione in varie parti della stessa pagina, quindi ho cercato una soluzione e mi sono imbattuto nelle variabili globali che sembrano funzionare per me. Tuttavia, dopo aver letto alcuni articoli, le persone sembrano essere contrarie all'uso di variabili globali e inoltre non sono del tutto sicuro di usarle nel modo corretto.

Ecco cosa ho:

/************************
* Variabili
************************/
global $bClass, $cClass, $dClass, $cExpiry;
       $bClass = $cClass = $dClass = $cExpiry = get_option('myoption');

Poi, dato che uso una singola opzione per salvare le variabili rilevanti in un array, visualizzo il valore in questo modo

jquery

expires: <?php global $cExpiry; echo $cExpiry['cExpiry']; ?>,

e poi lo userei anche in altre funzioni all'interno della stessa pagina.

Quindi, funziona per me, ma mi chiedo ancora se lo sto facendo nel modo giusto.

aggiornamento Grazie per la spiegazione ragazzi, ho finito per utilizzare variabili locali e ho anche trovato un errore nel mio codice;

Dato che ho tutte le mie variabili salvate in una singola opzione, ho usato solo una variabile locale:

$options = get_option('myoption');

Poi accedo all'array inserendo la variabile tra parentesi quadre

<?php echo $options['var1']; ?>

Mentre prima stavo facendo $bClass = $cClass = $dClass = $cExpiry = get_option('myoption'); che è sbagliato.

3
Commenti

Questa è una domanda su PHP quindi sarebbe meglio su stackoverflow, e sì, di solito è sbagliato fare così.

Wyck Wyck
27 set 2013 03:08:07

Nessun motivo per chiuderla. Non è solo una domanda su PHP. È anche una questione di localizzazione degli script, quindi rientra nell'ambito. Vedi risposta.

kaiser kaiser
27 set 2013 04:10:23

Le variabili globali possono essere utilizzate. Non sono così male. Basta solo un po' di attenzione. Assegnagli nomi più imprevedibili, ad es. $GLOBALS['primo_nome_globale_imprevedibile'] = '123'; – beginner 1 min fa modifica

beginner beginner
4 lug 2017 02:46:42
Tutte le risposte alla domanda 1
1

Ci sono modi più semplici di questo. Come già detto da @Wyck, l'uso dei globali è una cattiva idea, ecco una breve spiegazione e come fare:

Perché i globali sono negativi:

1) Chiunque può accedervi ovunque. All'inizio sembra bello, ma potresti anche fare quanto segue:

// Il tuo codice: valore predefinito
global $foo;
$foo = 'bar';

// Impostazione dell'utente:
global $foo;
$foo = get_option( 'baz' );

// Più avanti nel tuo codice
if ( 'bar' === $foo )
    // fai qualcosa di importante

// Ora io, l'utente finale, faccio questo in un template
// o Ernie, lo sviluppatore alle prime armi, lo fa nel suo plugin di terze parti:
$GLOBALS['foo'] = 42;

e improvvisamente nulla funziona come previsto. È semplice: i globali possono essere intercettati. Non sono privi di conflitti e nessuno può mai essere sicuro di ciò che contengono.

2) Ora che sai che possono cambiare al volo, sai che sono imprevedibili. E se vuoi rintracciarli con il tuo IDE (ad es. PHPStorm, Eclipse/Aptana, ecc.) non scoprirai mai qual è la loro origine o dove esattamente vengono modificati... a meno che non ti siedi per un bel po' e usi cose come Breakpoint e strumenti come XDebug e conosci la tua strada.

3) Devo davvero scrivere altro? Credo di no.

Conclusione: Poiché la maggior parte delle opzioni viene caricata automaticamente, sono già presenti in ogni pagina/richiesta e non è necessario racchiuderle in un globale. Chiama semplicemente get_option() ogni volta che ne hai bisogno.

Come spostare i dati da PHP a JS

È semplice: wp_localize_script()

Esempio: (può essere utilizzato anche con gli hook login_enqueue_scripts e admin_enqueue_scripts)

add_action( 'wp_enqueue_scripts', 'wpse115840_scripts' );
function wpse115840_scripts()
{
    wp_enqueue_script( 'wpse_handle', etc... );
    // Qui sta la magia:
    wp_localize_script( 'wpse_handle', 'wspeObject', array(
        'foo' => 'bar',
        'bar' => get_option( 'baz' )
    ) );
}

Ora puoi accedere a tutti i dati dell'array wp_localize_script() (il terzo argomento) nel tuo file javascript che hai appena registrato/caricato semplicemente chiamando wpseObject. Il seguente esempio ti darebbe ora il valore bar:

console.log( wpseObject.foo );

e il tuo wpseObject.bar conterrebbe il valore dell'impostazione baz.

27 set 2013 04:09:54
Commenti

...e se il plugin di terze parti ha lo stesso nome di riferimento per un processo add_action? Non per dire che sia altamente probabile, ma se accadesse, quali sarebbero le conseguenze diverse dall'avere 2 globali che si intersecano?

klewis klewis
12 ott 2016 22:53:54