Php 应该从IF';是条件运行还是只是评估?
我分析了一些代码,找到了其中的一部分(简化的示例),它说:Php 应该从IF';是条件运行还是只是评估?,php,Php,我分析了一些代码,找到了其中的一部分(简化的示例),它说: if(!dou_某事('action one')){ 做点别的事吧; } 因为我在第页看到了这个if语句的输出,所以我想“好吧,那么做点别的事情就是为什么显示这部分页面的原因。所以我把它注释掉: if(!dou_某事('action one')){ //做点别的事吧; } 但它仍然输出相同的内容。 然后我注释掉整个if语句,输出消失。 所以我意识到,dou\u something输出了我不期望的内容 难道不应该!do_somethi
if(!dou_某事('action one')){
做点别的事吧;
}
因为我在第页看到了这个if语句的输出,所以我想“好吧,那么做点别的事情
就是为什么显示这部分页面的原因。所以我把它注释掉:
if(!dou_某事('action one')){
//做点别的事吧;
}
但它仍然输出相同的内容。
然后我注释掉整个if语句,输出消失。所以我意识到,
dou\u something
输出了我不期望的内容
难道不应该!do_something()
只计算为真或假,特别是因为它有!
(需要自动类型转换)
这似乎是一种不好的做法,是应该避免的?在这种情况下,dou\u something不会返回bool。这就是为什么您会得到不同的输出,以了解
!dou something()
是真是假您的服务器必须运行该函数(因为您要求它运行)因此,echo
和print
s将运行并显示在您的页面上。如果您的意思是函数返回数据:它不应该出现在本例中(因为您没有将其发送给客户端),这将意味着发生了比我们在这里看到的更多的事情
如果不想运行If
语句中的函数,则应执行以下操作:
$do_somthing_bool = do_something('action-one'); //Function runs here
//This will still output echo's and prints but the output (return) of the function
// will be stored in $do_somthing_bool
if(!$do_somthing_bool) //Check if the value is false
//Do something
可能但很难说没有上下文,甚至可能是基于观点的。看。这可能是正常的、预期的操作,例如…
do\u something\u other
的执行依赖于do\u something
的成功/失败并不奇怪。因此do\u something
返回一些值并输出一些内容。lite您的问题的答案是“代码将运行”。真正的问题是这个函数是否应该打印出一些内容并返回一个值。如果您努力将逻辑与表示分离(我认为大多数人会说这是一个好的实践),那么这个函数公然违反了这个原则。@ggorlen我已经阅读了《副作用》这篇文章,以及它帮助我填补了缺失的空白的公认答案。谢谢。TimMorton是的,这是真正的问题,因为它是if语句的条件部分,似乎不是用于该目的的,因此是的,我同意它会如果有副作用的函数被保留在条件语句之外,那就很好了,但是一旦你意识到了这一点,调试它就容易多了。谢谢。你提到的第一个例子就是我的意思。所以:if(print_r('output')){
将打印输出并将整个函数计算为truthy或falsy,我没想到会对其进行解释/运行,但确实如此,而且它不是特定于PHP的。该示例代码很棒,谢谢。