Pergunta

EDITAR:Acredito que minha confusão provavelmente seja criada por este código no topo da página em que estou testando o valor da opção...Isso cria um método de atalho para se referir à opção sem usar o método get_option('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 então quando eu defino o valor de uma variável, $myvar, através de uma caixa de seleção marcada no painel de opções do meu tema e clico em salvar, então visualizo meu options.php em worpdress, o valor da variável é

true

E quando eu faço uma pesquisa nesta variável usando

if($myvar == "true")

Isso passa.

No entanto, quando defino o valor diretamente através do método update_options(), assim...

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

O valor muda de verdadeiro para 1

E quando faço a mesma comparação de antes, if($myvar == "true"), agora ela falha.Já não é “verdade”.

o que estou perdendo?(1) por que "true" e 1 não são avaliados da mesma forma e (2) O que o método update_option está fazendo com o valor de myvar para alterar o valor de true para 1?

Foi útil?

Solução

Tentar

if($myvar == true)

e

$myvar = true;

TRUE e FALSE são variáveis ​​booleanas incorporadas ao PHP que são muito mais universais do que uma string verdadeira.


Sobre a opção update_.Pode não ser que a opção esteja alterando para 1.Em vez disso, pode ser que, ao inseri-lo no banco de dados, ele o insira como a string "true".Então, quando volta, é convertido para o valor booleano true, que quando impresso é 1

Outras dicas

Tentar

if ($myvar)

Não teste se as coisas são "iguais" à verdade, elas são verdadeiras ou não.

Você deve mudar seu primeiro teste para if($myvar == true) ou simplesmente if ($myvar). O PHP tem algumas regras estranhas para o que é "verdadeiro"; Geralmente, as cordas se evitam para verdade, exceto os casos especiais de "0" e uma corda vazia "", que tipo de Cast a False.

Em seu exemplo específico, if ($myvar == "true"):

  • Se $myvar contém um booleano, a expressão avaliará como (bool) == (bool)"true", ou (bool) == true
  • Se $myvar contém um número inteiro, ele é fundido para uma corda e comparado com a string "true"; Portanto, seu teste está falhando, porque "1"! = "Verdadeiro".
  • Se $myvar é uma string, a comparação de strings ocorre e, de repente, apenas a string literal "True" comparará com sucesso.

Eu acho que 2º e 3º casos estão em vigor: o WordPress provavelmente está configurando $myval para a string "true" Quando o de From é postado de volta, seu teste passa. Quando você especifica manualmente booleano true, WordPress deve estar convertendo -o em um número inteiro e, em seguida, comparação inteira ocorre e falha, porque o número inteiro 1 será lançado para cordas "1" quando comparado contra "true".

Tenho certeza que você está ficando abaixo da força perto:

Digite a descrição da imagem aqui

Porque emulador Android não está tendo nenhuma entrada de áudio para gancho. Anexar o microfone ou fone de ouvido e testá-lo.

"True" é uma corda, e todas as cordas se evitam para o booleano 1 (tente lançar (bool) $string. true Por outro lado, sem cotações, é um booleano e avaliará como 1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top