Domanda

EDIT: Credo che la mia confusione è probabilmente creato da questo codice nella parte superiore della pagina in cui sto testando per il valore dell'opzione ... Questo crea un metodo di scelta rapida per fare riferimento alla possibilità senza utilizzare il get_option metodo ( 'option') ...

global $options;
foreach ($options as $value) {
if (get_settings( $value['id'] ) === FALSE) { 
        $$value['id'] = $value['std']; 
    } else { 
        $$value['id'] = get_settings( $value['id'] );
    }
}

E così quando ho impostato il valore di una variabile, $ myvar, tramite una casella di controllo il check-in pannello di opzioni di mio tema e fare clic su Salva, quindi visualizzare il mio options.php nel worpdress, il valore della variabile è

true

E quando faccio una ricerca su questa variabile utilizzando

if($myvar == "true")

Si passa.

Tuttavia, quando ho impostato il valore direttamente tramite i update_options () il metodo, in questo modo ...

$mvar = true;
update_option('myvar', $myvar);

Il valore passa da vero a 1

E quando lo faccio lo stesso confronto come prima, se ($ myvar == "true"), ora non riesce. Non è più "vero".

Che cosa mi manca? (1) perché è "vero" e 1, e non la valutazione della stessa e (2) Qual è il metodo update_option facendo per il valore di myvar per modificare il valore da true a 1?

È stato utile?

Soluzione

Prova

if($myvar == true)

e

$myvar = true;

TRUE e FALSE sono di PHP costruito nel variabili booleane che sono molto più universale di quanto un vero stringa.


A proposito del update_option. Potrebbe non essere che l'opzione cambia a 1. Invece potrebbe essere che il quando viene inserirla nel database, inserisce come "true" stringa. Poi, quando ritorna è convertito al true valore booleano, che una volta stampato è 1

Altri suggerimenti

Prova

if ($myvar)

Non verificare se le cose "uguali" veri, sono vere o non lo sono.

Si dovrebbe cambiare il tuo primo test a if($myvar == true) o semplicemente if ($myvar). PHP ha alcune regole strane per quello che è "vero"; In generale, le stringhe evaulate true, salvo i casi particolari di "0" e un "" stringa vuota, quale tipo pressofuso a false.

Nel tuo esempio specifico, if ($myvar == "true"):

  • Se $myvar contiene un valore booleano, l'espressione valuterà come (bool) == (bool)"true", o (bool) == true
  • Se $myvar contiene un intero, è gettato in una stringa e confrontato con la stringa "vera"; quindi il test non riesce, perché "1"! = "true".
  • Se $myvar è una stringa, confronto di stringhe avviene improvvisamente e solo la stringa letterale "vero" si confronta con successo.

Vorrei indovinare casi 2 e 3 sono a tutti gli effetti: Wordpress è probabile impostazione $myval al "true" stringa quando il da è pubblicato di nuovo, in modo che il test ha esito positivo. Quando si specifica manualmente true booleano, Wordpress deve essere la conversione in un numero intero, e quindi il confronto intero si svolge e non riesce, perché l'intero 1 sarà gettato al "1" stringa quando confrontato con "true".

Si sta facendo un confronto tra sciolto l'intero 1 e la stringa 'vero'. Per questo PHP tradurrà la stringa in un numero. 'Test' come un numero è 0:

var_dump((int) 'true'); // int(0)

E poiché 0 non è uguale a 1, il confronto tornerà falso.

Come alcune altre risposte già correttamente sottolineato, è necessario verificare contro il booleano letterale TRUE o true. Se un operatore in un controllo di uguaglianza è un valore booleano, PHP converte l'altro operatore per un valore booleano troppo, che, per il numero 1, darà

var_dump((bool) 1); // boolean(true)

E poi il test passerà, perché vero è uguale a true.

Controlla la Tipo Tabella di confronto per capire come PHP destreggia tipi quando test per l'uguaglianza .

Per quanto riguarda quello che fa al vostro check_update booleano, controlla i href="http://codex.wordpress.org/Function_Reference/update_option" descrizione della funzione :

  

(mista) (richiesto) Il nuovo valore per questo nome opzione. Questo valore può essere una stringa, un array, un oggetto o un valore serializzato.

Quindi, non booleano permesso. Ho provato brevemente per scoprire dal codice sorgente in cui la conversione avviene, ma dal momento che WP è un casino per me, non riusciva a trovarlo. Come qualcun altro ha suggerito, probabilmente accade quando lo si ripone al database e quindi ottenere indietro.

"vero" è una stringa, e tutte le stringhe evaulates al booleano 1 (Prova a trasmettere (bool) $string. true d'altra parte, senza virgolette, è un valore booleano e valuterà a 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top