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

时间:2011-02-04 00:36:17

标签: php casting boolean

我正在阅读this question并看到这一行:

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)

都可能更好,但是有一种最好的方式可以投射到bool吗?更重要的是,最好的是什么?

编辑以澄清:

这不是为了成为强制转换为布尔值的方法的全面列表而编写的。我的问题是特别是关于显式投射。在我了解empty之前,我使用了isset($var) && $var,因为它可以防止错误被抛弃在未声明的变量上。现在我使用!empty($var),因为输入速度更快。

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

我很好奇其他开发者是否有其他方式做我没有做过的事情 知道的。

5 个答案:

答案 0 :(得分:22)

这两种方式是:

  1. 明确演员:

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

    return (bool) $expression;
    
  2. 隐式演员(使用运算符):

    这是从表达式推断出类型的地方。在PHP中,这包括logical operatorscomparison operators,以及任何需要布尔值的函数/语言构造,例如ifwhile

    return !!$expression;
    

    return $expression == true;
    

    return $a == $b;
    

    return $a > 1;
    

    if ($a)
    
  3. 所有方法都属于这两个类别之一。

    我的建议是,如果您使用任何运算符(==!=>等),请不要费心去投票。但是如果你只是返回一个变量,那么明确地转换......

答案 1 :(得分:13)

我个人总是使用

(bool)$var;

我认为这是将其强制转换为布尔值的最明确方法。来自其他语言的大多数人都明白这一点。另一个你忘了你的是

!!$var;

我觉得有点难读。

答案 2 :(得分:5)

我在JavaScript中经常看到的内容:双重否定

return !!$var;

<强>解释

!$var评估$varopposite boolean value(如果$var不是布尔值,它是converted to boolean first (type conversion)),第二个!再次反转此值,导致布尔值,$var也会评估。

这是最好的吗?这取决于您的标准。如前所述,它可能更难理解(尽管它没什么特别的)但它绝对是最短的版本;)

它也可能取决于认为truefalse的值。默认情况下,这些值会评估为false

  
      
  • 布尔值FALSE本身
  •   
  • 整数0(零)
  •   
  • 浮点数0.0(零)
  •   
  • 空字符串,字符串“0”
  •   
  • 包含零元素的数组
  •   
  • 一个零成员变量的对象(仅限PHP 4)
  •   
  • 特殊类型NULL(包括未设置的变量)
  •   
  • 从空标签创建的SimpleXML对象
  •   

<强>更新

我认为通常可以说,避免明确返回truefalse的每个代码都更好。通过显式转换或隐式类型转换。当然,明确(按定义)应该更容易理解。

拥有return $a ? true : false之类的代码是多余的。特别是

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

可以写成return ($a == $b)

必须有一个原因,为什么这在我的本科生中不受欢迎;)。

<强> UPDATE2:

我会避免像return $var && true这样的表达。在PHP中,它将返回一个布尔值,但例如在JavaScript或Python中,如果计算结果为true,它将返回$var的值。在这些语言中,这种“技巧”是故意用于实现某些效果的。因此,对于熟悉这些语言的人(更多),可能并不明显(没有文档或上下文)只返回一个布尔值。

答案 3 :(得分:2)

  

将未知类型的变量(可能是字符串,可能是int;谁知道?谁关心?)转换为布尔值的最佳方法是什么?

return (bool)$var;

答案 4 :(得分:0)

你可以施放:

if ((bool)$string)

http://php.net/manual/en/language.types.type-juggling.php

注意,在PHP中,因为0 == false,你需要使用===比较器来进行类型比较,再加上值比较。

http://php.net/manual/en/language.operators.comparison.php