当条件为假时不执行其他函数的`if`语句
Posted
技术标签:
【中文标题】当条件为假时不执行其他函数的`if`语句【英文标题】:`if` statement that doesn't execute other functions when condition is found to be false 【发布时间】:2011-05-27 23:39:15 【问题描述】:在 php 中我可以这样做:
if (function1() && function2())
doSomething();
如果function1()
返回false,那么function2()
将不会被执行。
我忘记了这个语言功能的名称……你怎么称呼它?
【问题讨论】:
如果您不想要这种行为(希望两个函数都执行),请改用单个&
。
@Ralph:这实际上是一种误导,因为 & 在 PHP 中不是逻辑运算符,而是位运算符。它利用了 PHP 的转换工作方式,但它可能导致一些奇怪的错误。
明确地说,函数的布尔返回值被隐式转换为整数,并且 按位 and
正在根据这些整数进行评估。换句话说,gettype(true && false)
将返回 boolean
,但 gettype(true & false)
将返回 integer
。当在if
条件(或其他控制结构)中使用时,该整数返回值会被重新转换回布尔值。
是的,AgentConundrum 所说的......使用了一些演员表,但确实有效。你能举个例子,它会导致一个错误(带有布尔值)Paolo 吗?
@Ralph:澄清一下,我的评论只是对机制的解释,而不是为您的编码风格辩护。如果您确实需要确保在需要将函数作为第二个操作数运行时表达式不会短路,那么我建议您先运行函数并将其结果存储在变量中,然后您可以在条件中使用.您在做什么更加明显,并且不依赖于(相对)读者可能无法完全理解的晦涩的语言结构。
【参考方案1】:
这叫short-circuit evaluation
。
【讨论】:
以上是关于当条件为假时不执行其他函数的`if`语句的主要内容,如果未能解决你的问题,请参考以下文章