在php中将变量转换为布尔值的最佳方法是什么?

2022-08-30 22:52:45

我正在阅读这个问题,看到了这一行:

if ($a == $b) { return true } else { return false }

这让我不禁好奇,将未知类型的变量(可以是字符串,可以是int;谁知道呢?谁在乎?)转换为布尔值的最佳方法是什么?

当然,会做到这一点,但我认为可能更好。if ($var) { return true; } else { return false; }return $var ? true : false;

就此而言:

  • return $var && true
  • return $var || false
  • return !empty($var)

可能都更好,但是有没有最好的方法来施放到布尔?更重要的是,什么使它最好?

编辑以澄清:

编写本文的目的不是要成为转换为布尔值的方法的完整列表。我的问题特别涉及显式选角。在我了解之前,我使用了,因为它可以防止在未声明的变量上抛出错误。现在我使用,因为它打字更快。emptyisset($var) && $var!empty($var)

!empty具有(不)优点,即在未定义变量时不会引发任何错误。如果你正在检查或变量,这可能被认为是好的,对于大多数其他变量,我想这可能被认为是坏的,因为它会隐藏变量未初始化的问题,它应该被初始化。E_NOTICE$_GET$_SESSION

我很好奇其他开发人员是否有另一种做我不知道的事情的方式。


答案 1

这两种方法是:

  1. 显式转换:

    这是当您使用文字强制转换运算符显式转换变量时。(bool)

    return (bool) $expression;
    
  2. 隐式强制转换(使用运算符):

    这是从表达式中推断类型的位置。在 PHP 中,这包括逻辑运算符比较运算符,以及任何需要布尔值的函数/语言构造,例如 和 :ifwhile

    return !!$expression;
    

    return $expression == true;
    

    return $a == $b;
    

    return $a > 1;
    

    if ($a)
    

所有方法都将属于这两个类别之一。

我的建议是,如果您使用任何运算符(,,,等),请不要打扰转换。但是,如果您只是返回一个变量,则显式转换...==!=>


答案 2

我个人总是使用

(bool)$var;

我认为这是将其转换为布尔值的最清晰方法。大多数来自另一种语言的人都明白这一点。你忘记的另一个是

!!$var;

我发现那篇文章有点难以阅读。


推荐