if($ variable)究竟是如何工作的?

时间:2011-07-14 13:27:32

标签: php

  

可能重复:
  Regarding if statements in PHP

在PHP脚本中 - 像这样的if语句检查什么?

<?php if($variable){ // code to be executed } ?>  

我已经多次在脚本中看到它,现在我真的想知道它“寻找”的内容。它没有遗漏任何东西;它只是一个if语句中的一个简单变量......我无法在任何地方找到任何关于此的结果,所以很明显我会发布这个愚蠢的帖子。

8 个答案:

答案 0 :(得分:68)

构造if ($variable)测试以查看$variable是否评估任何“真实”值。它可以是布尔TRUE,也可以是非空,非NULL值或非零数字。查看布尔评估列表in the PHP docs.

从PHP文档:

var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)

但请注意,在测试变量或数组键是否已初始化时,if ($variable)不适合使用。如果变量或数组键尚不存在,则会产生E_NOTICE Undefined variable $variable

答案 1 :(得分:7)

如果将$variable转换为布尔值,则根据转换的结果进行操作。

有关详细信息,请参阅boolean文档。

  

要将值显式转换为boolean,请使用(bool)或(boolean)强制转换。但是,在大多数情况下,强制转换是不必要的,因为如果运算符,函数或控制结构需要布尔参数,将自动转换一个值。

答案 2 :(得分:4)

以下列表说明了在PHP中考虑评估false的内容:

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

其他每个值都被视为TRUE(包括任何资源)。

来源:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

在您的问题中,变量在if()语句中进行评估。如果未设置该变量,则根据上面的列表将其评估为false。如果已设置或具有值,则它将评估为true,从而在if()分支内执行代码。

答案 3 :(得分:3)

它会检查$variable是否评估为true。有几个正常值评估为true,请参阅PHP type comparison tables

if ( )可以包含最终评估为truefalse的任何表达式

if (true)                  // very direct
if (true == true)          // true == true evaluates to true
if (true || true && true)  // boils down to true

$foo = true;
if ($foo)                  // direct true
if ($foo == true)          // you get the idea...

答案 4 :(得分:1)

其中任何一个都被认为是假的(因此//code to be executed would没有运行)

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

所有其他值都应该是真的。有关PHP Booleans manual的更多信息。

答案 5 :(得分:1)

试着看看这个旧的扩展“php truth table”,让你的头围绕着等待爆胎的所有各种坑洼。在开始时尽可能明确地使用任何分叉代码的比较运算符。尝试并测试being identical而不是等于。

答案 6 :(得分:0)

它完全取决于您要检查的对象的值类型。在PHP中,每个对象类型都有一个值,如果选中,则返回false。可以在此处找到对这些的解释:http://php.net/manual/en/language.types.boolean.php一些评估为false的值是

float:0.0

int:0

布尔值:false

string:''

数组:[](空)

object:object有0个属性/为空

NULL

它与大多数其他语言略有不同,但一旦你习惯它,它就会非常方便。这就是为什么你可能会看到很多语句,比如

$result = mysqli_multi_query($query) or die('Could not execute query');

PHP中的函数只需要返回一个值为false的值类型,这样就可以了。如果第一个参数为true,则PHP中的OR运算符不会计算其第二个参数(因为无论第二个参数的输出如何,or语句仍将通过),这样的行将尝试调用查询并将结果分配给$ result 。如果查询失败并且函数返回false值,则该线程被终止并且打印出“无法执行查询”。

答案 7 :(得分:-1)

如果函数成功运行(true)或变量存在(true)boolean,则if语句将继续。否则将被忽略