zzz*_*Bov 16 php casting boolean
我正在阅读这个问题并看到这一行:
if ($a == $b) { return true } else { return false }
Run Code Online (Sandbox Code Playgroud)
它让我想知道,将一个未知类型的变量(可能是字符串,可能是int;谁知道?谁关心?)转换为布尔值的最佳方法是什么?
当然,if ($var) { return true; } else { return false; }会做到这一点,但我认为return $var ? true : false;可能更好.
对于这个问题:
return $var && truereturn $var || falsereturn !empty($var)都可能更好,但有没有最好的方式来投奔布尔?更重要的是,最好的是什么?
编辑澄清:
这并不是为了成为一个强制转换为布尔值的方法列表.我的问题是关于明确的演员.在我了解之前我empty使用过,isset($var) && $var因为它可以防止在未声明的变量上抛出错误.现在我用!empty($var)它来打字更快.
!empty具有(dis)优势,E_NOTICE即在未定义变量时不抛出任何错误.如果您正在检查$_GET或$_SESSION变量,这可能被认为是好的,对于大多数其他变量,我认为这可能被认为是错误的,因为它会隐藏变量未初始化的问题,应该初始化它.
我很好奇其他开发者是否有另一种做我不知道的事情的方法.
irc*_*ell 23
这两种方式是:
明确的演员:
这是使用文字强制转换运算符显式转换变量的时候(bool).
return (bool) $expression;
Run Code Online (Sandbox Code Playgroud)隐式强制转换(使用运算符):
这是从表达式推断出类型的地方.在PHP中,这包括逻辑运算符和比较运算符,以及任何需要布尔值的函数/语言构造,例如if和while:
return !!$expression;
Run Code Online (Sandbox Code Playgroud)
要么
return $expression == true;
Run Code Online (Sandbox Code Playgroud)
要么
return $a == $b;
Run Code Online (Sandbox Code Playgroud)
要么
return $a > 1;
Run Code Online (Sandbox Code Playgroud)
要么
if ($a)
Run Code Online (Sandbox Code Playgroud)所有方法都属于这两个类别之一.
我的建议是,如果你使用任何运营商(==,!=,>等),不要打扰铸造.但是,如果你只是返回一个变量,那么明确地投射......
Log*_*ley 13
我个人经常使用
(bool)$var;
Run Code Online (Sandbox Code Playgroud)
我认为这是将其转换为布尔值的最明确方式.来自其他语言的大多数人都明白这一点.另一个你忘记了的是
!!$var;
Run Code Online (Sandbox Code Playgroud)
我觉得有点难读.
我在JavaScript中最常看到的内容:双重否定
return !!$var;
Run Code Online (Sandbox Code Playgroud)
说明:
!$var求$var值为其相反的布尔值(如果$var不是布尔值,则首先将其转换为布尔值(类型转换)),然后第二次将其转换!为布尔值,$var也将求值。
最好吗?这取决于您的标准。如前所述,它可能很难理解(尽管没什么特别的),但它绝对是最短的版本;)
还可能取决于您将哪个值视为true和false。这些值false默认为:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串,字符串“ 0”
- 零元素数组
- 成员变量为零的对象(仅PHP 4)
- 特殊类型NULL(包括未设置的变量)
- 从空标签创建的SimpleXML对象
更新:
我认为一般来说,每个避免显式返回true或false更好的代码。通过显式强制转换或隐式类型转换。当然,明确的(根据定义)应该更容易理解。
拥有这样的代码return $a ? true : false是多余的。特别
if ($a == $b) { return true } else { return false }
Run Code Online (Sandbox Code Playgroud)
可以写成return ($a == $b)。
我的本科生对此一无所知;这一定是有原因的。
更新2:
我会避免使用return $var && true。在PHP中,它将返回一个布尔值,但是在JavaScript或Python中,它将返回$var如果其值为true 的值。在这些语言中,此“技巧”是有意使用的,以实现某些效果。因此,对于(更多)熟悉这些语言的人来说,(没有文档或上下文)应该仅返回布尔值可能并不明显。