English 中文(简体)
在php中,将变量强制转换为布尔值的最佳方法是什么?
原标题:What s the best way to cast a variable to a boolean in php?

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

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

这让我想知道,将未知类型的变量(可以是string,也可以是int;谁知道?谁在乎?)转换为布尔值的最佳方法是什么?

当然,if($var){return true;}else{return false;}会起作用,但我认为会返回$var?真:假可能更好。

就这一点而言:

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

都可能更好,但有没有最好的方式来铸造bool?更重要的是,是什么让它变得最好?

编辑以澄清:

写这篇文章的目的并不是为了全面列出转换为布尔值的方法。我的问题是,特别是关于显式选角。在我了解empty之前,我使用了isset($var)&&$var,因为它可以防止在未声明的变量上引发错误。现在我使用<code>!空($var),因为它的键入速度更快。

<代码>!空具有(dis)优点,即在未定义变量时不会引发任何E_NOTIFE错误。如果您重新检查$_GET$SESESSION变量,这可能被认为是好的,对于大多数其他变量,我认为这可能被视为坏的,因为它会隐藏变量未初始化的问题,而变量本应初始化。

I was curious as to whether other developers have another way of doing things that I hadn t known about.

最佳回答

这两种方式是:

  1. 显式强制转换:

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

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

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

    return !!$expression;
    

    return $expression == true;
    

    return $a == $b;
    

    return $a > 1;
    

    if ($a)
    

All methods will fall into one of those two categ或ies.

My suggestion is that if you use any operat或s (==, !=, >, etc), don t bother casting. But if you re just returning a variable, then cast explicitly...

问题回答

我个人总是使用

(bool)$var;

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

!!$var;

我觉得那本有点难读。

我在JavaScript中最常看到的是:双重否定

return !!$var;

解释:

<代码>$var将$var相反的布尔值(如果$var不是布尔值,则为首先转换为布尔值(类型转换)),第二个再次反转此值,生成布尔值,$var也会求值。

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

它还可能取决于您将哪些值视为truefalse。默认情况下,这些值的计算结果为false

  • the boolean FALSE itself
  • the integer 0 (zero)
  • the float 0.0 (zero)
  • the empty string, and the string "0"
  • an array with zero elements
  • an object with zero member variables (PHP 4 only)
  • the special type NULL (including unset variables)
  • SimpleXML objects created from empty tags

更新:

我认为一般来说,可以说,每一个避免显式返回truefalse的代码都更好。无论是通过显式强制转换还是隐式类型转换。当然,明确的(根据定义)应该更容易理解。

是否有之类的代码返回$a?true:false是多余的。尤其地

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

它可以写成<code>return($a==$b)

在我的本科生中,这一定是有原因的。)。

更新2:

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

将未知类型的变量(可以是string,也可以是int;谁知道呢?谁在乎呢?)强制转换为布尔值的最佳方法是什么?

return (bool)$var;

您可以铸造:

if ((bool)$string)

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

注意,在PHP中,由于0==false,您需要使用===comparator来获得类型比较和值比较。

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





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签