Php 为什么会这样做(声明);编译并运行?
自从我开始学习PHP以来,我一直在想这个问题。和其他许多新手一样,我到处都放了分号,出于某种原因,我把分号放在if语句编译和运行之后,但不像人们想象的那样 例如:Php 为什么会这样做(声明);编译并运行?,php,Php,自从我开始学习PHP以来,我一直在想这个问题。和其他许多新手一样,我到处都放了分号,出于某种原因,我把分号放在if语句编译和运行之后,但不像人们想象的那样 例如: <?php $foo = "bar"; if ($foo == "bar") // Correct way echo "OK"; if ($foo == "bar"); // Incorrect way echo "OK"; if ($foo == "derp"); // Incorrect way aga
<?php
$foo = "bar";
if ($foo == "bar") // Correct way
echo "OK";
if ($foo == "bar"); // Incorrect way
echo "OK";
if ($foo == "derp"); // Incorrect way again
echo "NO";
?>
这将输出:
奥科诺
为什么会这样?这个的预期用途是什么?代码中只剩下一个因某种原因从未被修复的twerk?看起来编译器只是跳过了整个if语句。因为PHP解释器正在查找
if(…)
之后的一条语句,以便在条件计算为true
时执行。添加分号告诉解释器您已经完成了语句。您已经有效地告诉PHP在条件为true时执行no-op语句。echo
甚至不再是if语句的一部分
这相当于写作
if($foo == "bar"){
}
echo "OK";
因为PHP解释器正在查找
if(…)
之后的一条语句,以便在条件的计算结果为true
时执行。添加分号告诉解释器您已经完成了语句。您已经有效地告诉PHP在条件为true时执行no-op语句。echo
甚至不再是if语句的一部分
这相当于写作
if($foo == "bar"){
}
echo "OK";
由于分号,第二个和第三个if语句被视为空语句。空洞的陈述真的没有任何作用 由于分号,第二个和第三个if语句被视为空语句。空洞的陈述真的没有任何作用 因为在您的情况下,分号被视为空语句,所以您的代码被解释为:
<?php
$foo = "bar";
if ($foo == "bar")
echo "OK";
if ($foo == "bar")
; // empty statement
echo "OK";
if ($foo == "derp")
; // empty statement
echo "NO";
?>
因为在您的情况下,分号被视为空语句,所以您的代码被解释为:
<?php
$foo = "bar";
if ($foo == "bar")
echo "OK";
if ($foo == "bar")
; // empty statement
echo "OK";
if ($foo == "derp")
; // empty statement
echo "NO";
?>
当我第一次开始学习Java时,这让我发疯,导致了很多bug。。。我仍然做恶梦 我假设它跳过if语句的原因是因为分号告诉编译器块已经结束 下面的方法可以奏效
if ($foo == "bar") echo = "OK";
如果您只是替换了变量赋值呢
if ($foo == "bar") ;
echo = "OK";
这仍然是法律法规,但它只是说,如果这个条件是真的,那么什么也不做。假定作为if块的一部分执行的代码将始终被执行
干杯,当我第一次开始学习Java时,这让我发疯,导致了很多bug。。。我仍然做恶梦 我假设它跳过if语句的原因是因为分号告诉编译器块已经结束 下面的方法可以奏效
if ($foo == "bar") echo = "OK";
如果您只是替换了变量赋值呢
if ($foo == "bar") ;
echo = "OK";
这仍然是法律法规,但它只是说,如果这个条件是真的,那么什么也不做。假定作为if块的一部分执行的代码将始终被执行
干杯,如其他答案中所述,“how”是因为分号作为空语句计算,然后下一行是if条件so被执行后的“after” 可能有很多东西在语法上是“有效的”,但没有实际用途,例如,从技术上讲,你可以在一行上加上一个分号,它不会起作用,但它是有效的。。。然而,在这种情况下,有一个现实世界中的用法:使用if条件作为执行一系列函数的方法,但在第一个返回true的函数处停止。比如:
//Go until it gets to one that returns true...
if (firstCall() || secondCall() || thirdCall()) ;
在该示例中,它将始终调用firstCall()
。如果该函数返回true,PHP在那里停止,因为其他函数的计算结果不重要,它知道整个语句都是true。如果它返回false,它将继续运行,直到遇到一个返回true的函数(直到它通过所有部分)。换言之,上述内容将是这方面的简称:
if (!firstCall()) {
if (!secondCall()) {
thirdCall();
}
}
您可以使用AND执行类似的解决方案,使其在返回false的第一个方法处停止。如其他答案中所述,“how”是因为分号被计算为空语句,然后下一行是“after”if条件so被执行 可能有很多东西在语法上是“有效的”,但没有实际用途,例如,从技术上讲,你可以在一行上加上一个分号,它不会起作用,但它是有效的。。。然而,在这种情况下,有一个现实世界中的用法:使用if条件作为执行一系列函数的方法,但在第一个返回true的函数处停止。比如:
//Go until it gets to one that returns true...
if (firstCall() || secondCall() || thirdCall()) ;
在该示例中,它将始终调用firstCall()
。如果该函数返回true,PHP在那里停止,因为其他函数的计算结果不重要,它知道整个语句都是true。如果它返回false,它将继续运行,直到遇到一个返回true的函数(直到它通过所有部分)。换言之,上述内容将是这方面的简称:
if (!firstCall()) {
if (!secondCall()) {
thirdCall();
}
}
您可以使用AND执行类似的解决方案,使其在返回false的第一个方法处停止