Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.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';是条件运行还是只是评估?_Php - Fatal编程技术网

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的。该示例代码很棒,谢谢。