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

Nis*_*sto 59 php

可能重复:
关于PHP中的if语句

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

<?php if($variable){ // code to be executed } ?>  
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ski 75

构造if ($variable)测试以查看是否$variable评估任何"truthy"值.它可以是布尔值TRUE,也可以是非空的非NULL值或非零数字.查看PHP文档中的布尔评估列表.

从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)
Run Code Online (Sandbox Code Playgroud)

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

  • 除了提供知识外,我还要为你的词汇添加"truthy"这个词. (18认同)
  • @BasilMusa不,它不应该用于检查变量是否已初始化.如果变量尚未初始化,它将导致`E_NOTICE未定义变量$ var`.你必须使用`isset($ var)`来知道它们是否已被初始化,然后检查它的布尔值. (2认同)

Mat*_*Mat 7

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

有关详细信息,请参阅布尔文档.

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


kev*_*out 5

以下列表解释了false在 PHP 中被视为评估的内容:

  • 布尔值 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。如果它被设置,或者有一个值,它将评估为真,因此在if()分支内执行代码。