Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php if($variable)究竟是如何工作的?_Php - Fatal编程技术网

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

Php if($variable)究竟是如何工作的?,php,Php,可能重复: 在PHP脚本中,像这样的if语句检查什么 <?php if($variable){ // code to be executed } ?> 我已经在脚本中见过好几次了,现在我真的很想知道它“在寻找什么”。它没有遗漏任何东西;它只是if语句中的一个普通变量。。。我在任何地方都找不到关于此的任何结果,因此显然我在发布此消息时会显得很愚蠢。如果将$variable转换为布尔值,并根据该转换的结果进行操作 有关更多信息,请参阅文档 要将值显式转换为布尔值,请使用(bo

可能重复:

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

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


我已经在脚本中见过好几次了,现在我真的很想知道它“在寻找什么”。它没有遗漏任何东西;它只是if语句中的一个普通变量。。。我在任何地方都找不到关于此的任何结果,因此显然我在发布此消息时会显得很愚蠢。

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

有关更多信息,请参阅文档

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


它完全取决于要检查的对象的值类型。在PHP中,每个对象类型都有一个特定的值,如果对照检查,该值将返回false。这里可以找到对这些的解释:一些计算为false的值是

浮动:0.0

整数:0

布尔值:false

字符串:“”

数组:[](空)

对象:对象具有0个属性/为空

空的

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

$result = mysqli_multi_query($query) or die('Could not execute query');
PHP中的函数只需返回一个值类型,该值类型的计算结果为false,这样的函数才能工作。如果第一个参数为true(无论第二个参数的输出如何,OR语句仍将通过),则PHP中的OR运算符将不会计算其第二个参数,这样的行将尝试调用查询并将结果分配给$result。如果查询失败且函数返回假值,则线程将被终止并打印“无法执行查询”。

构造
If($variable)
测试
$variable
是否计算为任何“truthy”值。它可以是布尔值
TRUE
,也可以是非空、非空值或非零数。看一下布尔计算的列表

从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_通知未定义的变量$variable

其中任何一个都被认为是错误的(因此
//要执行的代码将不会运行)

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象

所有其他值都应为true。更多信息请访问。

它检查
$variable
的计算结果是否为
true
。有两个正常值的计算结果为
true
,请参阅

if()
可以包含最终计算结果为
true
false
的任何表达式

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...

下面的列表解释了在PHP中,什么被认为是计算为
false

  • 布尔值本身是假的
  • 整数0(零)
  • 浮动0.0(零)
  • 空字符串和字符串“0”
  • 零元素数组
  • 具有零成员变量的对象(仅限PHP 4)
  • 特殊类型NULL(包括未设置的变量)
  • 从空标记创建的SimpleXML对象
其他所有值均视为真(包括任何资源)

资料来源:


在您的问题中,变量在
if()
语句中求值。如果变量未设置,它将根据上面的列表计算为false。如果它被设置或有一个值,它将计算为true,因此在
If()
分支内执行代码。

如果函数成功运行(true)或变量存在(true)
布尔
则If语句将继续。否则它将被忽略

试着看一下这个旧的“扩展”按钮,让你的头绕过所有等待爆胎的凹坑。开始时,请尽可能明确地使用任何分叉代码的比较运算符。试着用等于的东西来测试。

如果变量为true/exists,{}之间的代码将被执行。除了提供知识外,我还向你推荐在我的词汇表中添加“truthy”一词。这被认为是检查变量时的一种好做法吗?@BasilMusa No,它不应用于检查变量是否已初始化。如果变量尚未初始化,则会导致
E\u注意未定义的变量$var
。您必须使用
isset($var)
来知道它们是否已初始化,然后检查其布尔值。您也可以使用
!空($var)
检查变量是否已设置且是否为“truthy”。在php7中有一个速记操作数??因此:
$isSetAndTruthy=$var??虚假的
等于
$isSetAndTruthy=!空($var)和等于
$isSetAndTruthy=isset($var)&&$var-1表示“计算为false的某些值为…对象:对象具有0个属性/为空”-这是false。除了空的
simplexmlement
s(这是该语言内置的一个相当荒谬的特例),PHP中的所有其他对象都是真实的。尝试
var_dump((bool)(新stdclass))
您将得到
bool(true)
-1;整个答案都是胡说八道。函数完全有可能成功运行并返回错误的值,或者变量存在并错误。