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;整个答案都是胡说八道。函数完全有可能成功运行并返回错误的值,或者变量存在并错误。