[英]What's the difference between if and elseif?
这应该是一个简单的问题。 我有一个简单的if / else语句:
<?php
// TOP PICTURE DEFINITIONS
if ( is_page('english') ) {
$toppic = 'page1.png';
}
if ( is_page('aboutus') ) {
$toppic = 'page1.png';
}
if ( is_page('newspaper') ) {
$toppic = 'page1.png';
}
else {
$toppic = 'page1.png';
}
?>
和^^^有什么不同吗:
<?php
// TOP PICTURE DEFINITIONS
if ( is_page('english') ) {
$toppic = 'page1.png';
}
elseif ( is_page('aboutus') ) {
$toppic = 'page1.png';
}
elseif ( is_page('newspaper') ) {
$toppic = 'page1.png';
}
else {
$toppic = 'page1.png';
}
?>
我应该提一下,这是进入Wordpress的。 直到现在,我已经使用了第一部分(没有其他,只是一系列'ifs'),并且它有效。 我很想知道区别是什么。
谢谢! 阿米特
是。 如果满足if/else
控制中的条件,则将省略其余检查。 else if
仅仅是一个嵌套if
内部else
!
if ( is_page('english') ) { // if true, other statements are skipped
$toppic = 'page1.png';
}
elseif ( is_page('aboutus') ) {
$toppic = 'page1.png';
}
elseif ( is_page('newspaper') ) {
$toppic = 'page1.png';
}
else {
$toppic = 'page1.png';
}
但是在一系列if
,所有这些都将被测试。
if ( is_page('english') ) {
$toppic = 'page1.png';
}
if ( is_page('aboutus') ) { // will be tested no matter what the outcome
// of the previous if statement was
$toppic = 'page1.png';
}
if ( is_page('newspaper') ) { // the same here
$toppic = 'page1.png';
}
else {
$toppic = 'page1.png';
}
因此,如果您正在检查诸如数字奇偶校验之类的属性,那么它可能是奇数或偶数,如果满足,您为什么还要打扰检查其他条件。 这是浪费资源。 因此,以下代码要好得多
if(number_is_odd) {
}
else { // if it's not odd, it's even for sure
}
比
if(number_is_odd) {
}
if(!number_is_odd) {
}
因为前者检查条件一次,而后者检查两次。 对于具有两个以上状态的条件,情况也是如此。
第一种方法将检查每个条件,无论它们是真还是假。
第二种方法将检查每个条件,直到一个为真,然后忽略其余条件。
在第一个块中,执行块中的每个比较。 此外,toppic将始终分配给is_page('newspaper')中的值或is_page('newspaper')的else语句中的值。 发生这种情况是因为始终评估最后的if语句。 即使之前的if语句之一被评估为true,您也会在else块中结束。 要测试这个,请尝试此代码...
<?php
// TOP PICTURE DEFINITIONS
if ( is_page('english') ) {
$toppic = 'english.png';
}
if ( is_page('aboutus') ) {
$toppic = 'aboutus.png';
}
if ( is_page('newspaper') ) {
$toppic = 'newspaper.png';
}
else {
$toppic = 'finalelse.png';
}
?>
你总是以'newspaper.png'或'finalelse.png'结尾。
<?php
if ( 3 > 1 ) {
echo "This will be printed.";
}
if ( 3 > 2 ) {
echo "This will be printed too.";
}
if ( 3 > 3 ) {
echo "This will NOT be printed.";
}
else {
echo "This WILL be printed.";
}
?>
但是与elseif:
<?php
if ( 3 > 1 ) {
echo "This will be printed.";
}
elseif ( 3 > 2 ) { /* This condition will not be evaluated */
echo "This will NOT be printed";
// because it's on the ELSE part of the previous IF
}
elseif ( 3 > 3 ) { /* This condition will not be evaluated either */
echo "This will NOT be printed.";
}
else { /* This ELSE condition is still part of the first IF clause */
echo "This will NOT be printed.";
}
?>
所以你应该使用ELSEIF,因为否则$ toppic将总是导致'newspaper.png',它应该是正确的,或者'finalelse.png'可能是对还是错,因为它将覆盖先前的条件子句。
我希望你会发现这很有帮助。
这并不仅仅是效率问题。 如果您正在切换某些内容,则必须使用else if
,而不仅仅if
假设我们正在切换变量$computerOn
if ($computerOn == true) {
$computerOn = false;
}
if ($computerOn == false) {
$computerOn = true;
}
在上面的情况下, $computerOn
将永远为true
。 如果它是true
,它被设置为false
。 在此之后,我们检查它是否为false
,它现在必须独立于初始条件,因此它现在设置为true
。
另一方面,下面的代码将切换$ computerOn:
if ($computerOn == true) {
$computerOn = false;
} elseif ($computerOn == false) {
$computerOn = true;
}
现在我们只检查$computerOn
是否为false
如果它最初不是true
。 因此我们有一个切换。
如果事情变得更复杂,你可能不得不使用多个elseif
。 重要的是要认识到逻辑何时指示elseif
是必须与选项。
两者之间最大的区别是,只要is_page('newspaper')
返回false,就会调用最后一个else
块。 在这种情况下,它几乎意味着每次脚本运行。 在这种情况下,这并不是什么大不了的事,因为你只设置一个变量,它与其他所有变量都是一样的。 但是,如果它不同,你会有一个非常令人沮丧的错误追踪!
除此之外,如果使用单独的if
语句,则每次都会评估每个if
的条件。 同样,在这种情况下,它(可能)并不是什么大不了的事。 但是,如果条件是,说......
if(delete_file('foo.png')) {
....
}
if(delete_file('bar.png')) {
....
}
if(delete_file('baz.png')) {
....
}
else {
....
}
好吧,你应该能够看到它的发展方向;)如果你使用elseif
,一旦它变为真,它将停止尝试评估。 并且,只有在没有其他条件成立的情况下才会调用else。
答案很简单:
if(a==1){
b
}
elsif(b==1){
c
}
等于
if(a==1){
b
}
else{
if(b==1){
c
}
}
这是一样的
if(a==1){
b
}
if(b==1){
c
}
如果a == 1且b == 1同时不可能。 虽然两个if语句都可以为true,但是当b和c可以执行时。 如果你在那里使用elsif,这是不可能的,因为只有在!= 1时才会检查b == 1!
明智地使用else可以节省大量时间,因为解析器不需要评估所有条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.