estaba leyendo this question y vi esta línea:?¿Cuál es la mejor manera de convertir una variable a un booleano en php?
if ($a == $b) { return true } else { return false }
Y me llevó a preguntarse, ¿cuál es la mejor manera de convertir una variable de tipo desconocido (podría ser una cadena, podría ser int; quién sabe quién ¿Cuidados?) a un booleano?
Por supuesto, if ($var) { return true; } else { return false; }
haría el truco, pero creo que return $var ? true : false;
es probablemente mejor.
Por lo demás:
return $var && true
return $var || false
return !empty($var)
son todos probablemente mejor, pero hay una manera mejor para echar a bool? Más importante aún, ¿qué lo hace mejor?
Editar para aclarar:
Esto no fue escrito con la intención de ser una lista exhaustiva de las formas de emitidos a un valor lógico. Mi pregunta es específicamente en fundición explícita. Antes de saber empty
utilicé isset($var) && $var
, ya que evitaría errores en las variables no declaradas. Ahora uso !empty($var)
ya que es más rápido escribir.
!empty
tiene la (des) ventaja de no arrojar ningún error E_NOTICE
cuando la variable no está definida. Esto podría considerarse bueno si está verificando las variables $_GET
o $_SESSION
, para la mayoría de las demás variables, supongo que esto puede considerarse malo, ya que podría ocultar problemas donde una variable no se inicializó donde debería haber sido inicializada.
Tenía curiosidad sobre si otros desarrolladores tienen otra forma de hacer las cosas que yo no sabía .
Me interesaría saber por qué cree que hay una mejor manera de hacerlo. Yo, por ejemplo, no creo que exista * el mejor código *. Por supuesto, puede encontrar criterios objetivos hasta cierto punto, pero en un punto se está volviendo subjetivo. –
@Felix Kling, es una pregunta subjetiva para estar seguro, no quería usar * best *, pero me resulta difícil encontrar buenos parámetros para juzgar algo tan simple como el lanzamiento booleano: ¿el más rápido? apenas importa. más corto para escribir? ¿legibilidad? – zzzzBov
Fuera de interés, [ejecuté una prueba rápida] (https://eval.in/431853) para ver cuál era más rápido y encasillarlo explícitamente usando '(bool)' era consistentemente más rápido. – Styphon