Pregunta

EDIT: Creo que mi confusión es probablemente creado por este código en la parte superior de la página en la que estoy probando para el valor de la opción ... Esto crea un método abreviado para referirse a la opción sin utilizar el get_option ( 'opción') método ...

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

Y así, cuando me puse el valor de una variable, $ mivar, a través de una casilla marcada en el panel de opciones de mi tema y haga clic en Guardar, a continuación, ver mi options.php en worpdress, el valor de la variable es

true

Y cuando lo haga una búsqueda sobre esta variable utilizando

if($myvar == "true")

Se pasa.

Sin embargo, cuando establece el valor directamente a través de los-actualización () método, al igual que ...

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

El valor cambia de TRUE a 1

Y cuando lo haga la misma comparación que antes, si ($ mivar == "true"), ahora no. Ya no es "verdadero".

¿Qué me falta? (1) ¿Por qué es "verdadero" y 1, no evaluar la misma y (2) ¿Cuál es el método update_option haciendo que el valor de mivar para cambiar el valor de verdadero a 1?

¿Fue útil?

Solución

Trate

if($myvar == true)

y

$myvar = true;

TRUE y FALSE son de PHP construido en variables booleanas que son mucho más universal que una verdadera cadena.


Sobre el update_option. Puede que no sea la opción que está cambiando a 1. En lugar de ello podría ser que la cuando se está insertando en la base de datos, se inserta como el "true" cadena. Entonces, cuando se trata de nuevo se convierte en el true valor booleano, que cuando se imprime es 1

Otros consejos

Trate

if ($myvar)

No pruebe si las cosas "igual" verdadera, que son verdaderas o no lo son.

Debe cambiar su primera prueba a if($myvar == true) o simplemente if ($myvar). PHP tiene algunas reglas extrañas para lo que es "verdadero"; En general, las cadenas evaulate true, salvo los casos especiales de "0" y un "" cadena vacía, el tipo de fundición a falso.

En el ejemplo específico, if ($myvar == "true"):

  • Si $myvar contiene un valor lógico, la expresión se evaluará como (bool) == (bool)"true" o (bool) == true
  • Si $myvar contiene un número entero, es fundido en una cadena y se compara con la cadena "true"; por lo que la prueba está fallando, ya que "1"! = "true".
  • Si $myvar es una cadena, la comparación de cadenas tiene lugar y de repente sólo el literal de cadena "verdadero" comparará con éxito.

Me imagino 2ª y 3ª casos están en vigor: Wordpress es probable $myval ajuste a la cadena "true" cuando el que se publica desde atrás, por lo que pasa la prueba. Al especificar manualmente true booleano, Wordpress debe ser convertirlo en un entero, y luego se lleva a cabo la comparación de enteros y fracasa, debido a que el número entero 1 será lanzado a "1" cadena cuando se compara con "true".

Usted está haciendo una comparación suelta entre el entero 1 y la cadena 'verdadero'. Por esta PHP traducirá la cadena en un número. 'Prueba' como un número es 0:

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

Y desde 0 no es igual a 1, la comparación será volver falsa.

Al igual que algunas otras respuestas ya señalado correctamente, se debe probar en contra de la booleano literal TRUE o true. Si un operador en una verificación de la igualdad es un valor booleano, PHP convertirá el otro operador a un valor booleano también, que, para el número 1, dará

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

Y a continuación, la prueba pasará, porque los verdaderos es igual a verdadera.

Salida del href="http://de2.php.net/manual/en/types.comparisons.php" rel="nofollow noreferrer"> Tipo Tabla Comparativa para entender cómo Juggles PHP tipos cuando pruebas para la igualdad .

En cuanto a lo que hace a su check_update booleano, visita nuestra función de descripción :

  

(mixta) (requerido) El nuevo valor para este nombre de la opción. Este valor puede ser una cadena, una matriz, un objeto o un valor serializado.

Así que, no permitió booleano. He tratado brevemente para averiguar a través de la código fuente donde se realiza la conversión, pero desde WP es un desastre para mí, no podía encontrarlo. Al igual que otra persona sugirió, es probable que ocurra cuando se almacenan a la base de datos y luego conseguir de nuevo.

"verdadero" es una cadena, y todas las cadenas de evaulates al valor booleano 1 (Prueba a transmitir (bool) $string. true, por otro lado, sin comillas, es un valor lógico y evaluará a 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top