El ternario no parece necesario. ¿Por qué no simplemente establecer $ test_mode_mail en el valor de la desigualdad? $ test_mode_mail = $ string === 'true'
Tim Banks
3
Pero, ¿qué pasa con 1/0, VERDADERO / FALSO? Creo que la respuesta de @lauthiamkok es la mejor.
ryabenko-pro
1
@FelipeTadeo Estoy hablando de cómo PHP evalúa las cadenas con respecto a las operaciones booleanas, nunca mencioné eval () y nunca recomendaría usarlo bajo ninguna circunstancia. PHP evaluará la cadena "(3 <5)" como verdadera booleana porque no está vacía.
GordonM
648
Este método fue publicado por @lauthiamkok en los comentarios. Lo publico aquí como respuesta para llamar más la atención.
Dependiendo de sus necesidades, debe considerar usar filter_var()con la FILTER_VALIDATE_BOOLEANbandera.
Realmente me gusta esta solución para configurar booleanos basados en atributos de código abreviado de WordPress que tienen valores como verdadero, falso, encendido, 0, etc. Gran respuesta, definitivamente debería ser la respuesta aceptada.
!! Nota IMPORTANTE !! filter_var devuelve también FALSE si falla el filtro. Esto puede crear algunos problemas.
AFA Med
35
La cadena "false" es considerada realmente un "TRUE"valor por PHP. La documentación dice:
Para convertir explícitamente un valor a booleano, use los moldes (bool) o (boolean). Sin embargo, en la mayoría de los casos la conversión es innecesaria, ya que un valor se convertirá automáticamente si un operador, función o estructura de control requiere un argumento booleano.
Ver también Tipo Malabares.
Al convertir a booleano, los siguientes valores se consideran FALSOS:
el booleano FALSO
el entero 0 (cero)
el flotador 0.0 (cero)
la cadena vacía y la cadena "0"
una matriz con cero elementos
un objeto con cero variables miembro (solo PHP 4)
el tipo especial NULL (incluidas las variables no definidas)
Objetos SimpleXML creados a partir de etiquetas vacías
Cualquier otro valor se considera VERDADERO (incluido cualquier recurso).
entonces si lo haces:
$bool =(boolean)"False";
o
$test ="false";
$bool = settype($test,'boolean');
En ambos casos $boolserá TRUE. Por lo tanto, debe hacerlo manualmente, como sugiere GordonM.
Euhm, por supuesto, el inferior devuelve falso. De hecho, arroja un error fatal :) "Error fatal: solo las variables se pueden pasar por referencia". $ a = 'Falso'; settype ($ a, 'boolean'); var_dump ($ a); de hecho volverá falso.
Rob
16
Al trabajar con JSON, tuve que enviar un valor booleano a través de $_POST. Tuve un problema similar cuando hice algo como:
if( $_POST['myVar']==true){// do stuff;}
En el código anterior, mi booleano se convirtió en una cadena JSON.
Para superar esto, puede decodificar la cadena usando json_decode():
//assume that : $_POST['myVar'] = 'true';if( json_decode('true')==true){//do your stuff; }
(Esto normalmente debería funcionar con valores booleanos convertidos en cadena y enviados al servidor también por otros medios, es decir, que no sean JSON).
Al hacerlo de esta manera, puede recorrer una serie de 'verdadero', 'VERDADERO', 'falso' o 'FALSO' y obtener el valor de la cadena a un valor booleano.
Tengo que tener en cuenta que filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );aún será una mejor opción si necesita tener cadenas on/yes/1como alias para true.
Lo hago de una manera que arrojará cualquier versión que no distinga entre mayúsculas y minúsculas de la cadena "false" al booleano FALSO, pero se comportará utilizando las reglas normales de conversión de php para todas las demás cadenas. Creo que esta es la mejor manera de prevenir comportamientos inesperados.
La respuesta de @GordonM es buena. Pero fallaría si $stringya es true(es decir, la cadena no es una cadena sino booleana VERDADERA) ... lo que parece ilógico.
Extendiendo su respuesta, usaría:
$test_mode_mail =($string ==='true' OR $string ===true));
Me estaba confundiendo con los atributos de código abreviado de WordPress, decidí escribir una función personalizada para manejar todas las posibilidades. tal vez sea útil para alguien:
Editado para mostrar una posibilidad no mencionada aquí, porque mi respuesta original estaba lejos de estar relacionada con la pregunta del OP.
preg_match (); Es posible de usar. Sin embargo, en la mayoría de las aplicaciones será mucho más pesado de usar que otras respuestas aquí.
if(preg_match("/true/i","true PHP is a web scripting language of choice.")){
echo "<br><br>Returned true";}else{
echo "<br><br>Returned False";}
/(?:true)|(?:1)/iTambién se puede usar si es necesario en ciertas situaciones. No volverá correctamente cuando evalúa una cadena que contiene "falso" y "1".
!!$string1devolvería un booleano indicativo de la cadena descrita en la respuesta mejor calificada.Respuestas:
Las cadenas siempre se evalúan como verdaderas booleanas a menos que tengan un valor que PHP considere "vacío" (tomado de la documentación de
empty):""(una cadena vacía);"0"(0 como una cadena)Si necesita establecer un valor booleano basado en el valor de texto de una cadena, deberá verificar la presencia o no de ese valor.
EDITAR: el código anterior está destinado a la claridad de la comprensión. En uso real, el siguiente código puede ser más apropiado:
o tal vez el uso de la
filter_varfunción puede cubrir más valores booleanos:filter_varabarca toda una serie de valores, incluyendo los valores Truthy"true","1","yes"y"on". Ver aquí para más detalles.fuente
$string === 'true'filter_var($string, FILTER_VALIDATE_BOOLEAN);es algo bueno?Este método fue publicado por @lauthiamkok en los comentarios. Lo publico aquí como respuesta para llamar más la atención.
Dependiendo de sus necesidades, debe considerar usar
filter_var()con laFILTER_VALIDATE_BOOLEANbandera.fuente
filter_var($answer, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)funcionó aún mejor para mí. Ver php.net/manual/en/function.filter-var.php#121263La cadena
"false"es considerada realmente un"TRUE"valor por PHP. La documentación dice:entonces si lo haces:
o
En ambos casos
$boolseráTRUE. Por lo tanto, debe hacerlo manualmente, como sugiere GordonM.fuente
Al trabajar con JSON, tuve que enviar un valor booleano a través de
$_POST. Tuve un problema similar cuando hice algo como:En el código anterior, mi booleano se convirtió en una cadena JSON.
Para superar esto, puede decodificar la cadena usando
json_decode():(Esto normalmente debería funcionar con valores booleanos convertidos en cadena y enviados al servidor también por otros medios, es decir, que no sean JSON).
fuente
puedes usar json_decode para decodificar ese booleano
fuente
Maneja todas las variantes posibles de
$stringfuente
onyoff?Si su variable "booleana" proviene de una matriz global como $ _POST y $ _GET, puede usar la
filter_input()función de filtro.Ejemplo para POST:
Si su variable "booleana" proviene de otra fuente, puede usar la
filter_var()función de filtro.Ejemplo:
fuente
Puedes usar
boolval($strValue)Ejemplos:
Documentación http://php.net/manual/es/function.boolval.php
fuente
echo boolval('false');=> 1echo (int)'false;oecho intval('false');(int)'true'yintval('true')ambos devuelven 0 también (todas las cadenas lo hacen)Lo más fácil de hacer es esto:
Al hacerlo de esta manera, puede recorrer una serie de 'verdadero', 'VERDADERO', 'falso' o 'FALSO' y obtener el valor de la cadena a un valor booleano.
fuente
Otras respuestas están por complicar las cosas. Esta pregunta es simplemente una pregunta lógica . Solo haz tu declaración correcta.
Ahora tu respuesta será
false, si la cadena era'false',true, si tu cadena era'true'.Tengo que tener en cuenta que
filter_var( $boolString, FILTER_VALIDATE_BOOLEAN );aún será una mejor opción si necesita tener cadenason/yes/1como alias paratrue.fuente
o
fuente
Debes especificar
de lo contrario, siempre obtendrá falso incluso si $ string contiene algo más.fuente
¡También puedes usar el método settype!
SetType ($ var, "Boolean") Echo $ var // ver 0 o 1
fuente
Lo hago de una manera que arrojará cualquier versión que no distinga entre mayúsculas y minúsculas de la cadena "false" al booleano FALSO, pero se comportará utilizando las reglas normales de conversión de php para todas las demás cadenas. Creo que esta es la mejor manera de prevenir comportamientos inesperados.
O como una función:
fuente
La respuesta de @GordonM es buena. Pero fallaría si
$stringya estrue(es decir, la cadena no es una cadena sino booleana VERDADERA) ... lo que parece ilógico.Extendiendo su respuesta, usaría:
fuente
Me estaba confundiendo con los atributos de código abreviado de WordPress, decidí escribir una función personalizada para manejar todas las posibilidades. tal vez sea útil para alguien:
fuente
Una manera simple es verificar una serie de valores que considere verdaderos.
fuente
Editado para mostrar una posibilidad no mencionada aquí, porque mi respuesta original estaba lejos de estar relacionada con la pregunta del OP.
preg_match (); Es posible de usar. Sin embargo, en la mayoría de las aplicaciones será mucho más pesado de usar que otras respuestas aquí.
/(?:true)|(?:1)/iTambién se puede usar si es necesario en ciertas situaciones. No volverá correctamente cuando evalúa una cadena que contiene "falso" y "1".fuente
En PHP, simplemente puede convertir un valor a booleano utilizando double not operator (
!!):fuente
Debería poder convertir a un booleano usando (bool) pero no estoy seguro sin verificar si esto funciona en las cadenas "verdadero" y "falso".
Sin embargo, esto podría valer un poco
Vale la pena saber que lo siguiente evaluará el valor booleano False cuando se coloque dentro
Todo lo demás se evaluará como verdadero.
Como se describe aquí: http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
fuente
"false"entrue.$myBool = (bool)"False"; if ($myBool) { echo "true"; }