这应该是一个简单的问题。我有一个简单的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'),并且它有效。我很想知道区别是什么。
谢谢! 阿米特
答案 0 :(得分:16)
是。如果满足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) {
}
因为前者检查条件一次,而后者检查两次。对于具有两种以上状态的条件,情况也是如此。
答案 1 :(得分:2)
第一种方法将检查每个条件,无论它们是真还是假。
第二种方法将检查每个条件,直到一个为真,然后忽略其余条件。
答案 2 :(得分:2)
在第一个块中,执行块中的每个比较。此外,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'结尾。
答案 3 :(得分:2)
<?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'可能是对还是错,因为它会覆盖以前的条件子句
我希望你会发现这很有帮助。
答案 4 :(得分:2)
这并不仅仅是效率问题。如果您要切换某些内容,则必须使用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
是必须与选项。
答案 5 :(得分:1)
两者之间最大的区别是,只要else
返回false,就会调用最后一个is_page('newspaper')
块。在这种情况下,它几乎意味着每次脚本运行。在这种情况下,这并不是什么大不了的事,因为你只设置一个变量,它与其他所有变量都是一样的。但是,如果它不同,你会有一个非常令人沮丧的错误追踪!
除此之外,如果您使用单独的if
语句,则每次都会评估每个if
的条件。同样,在这种情况下,它(可能)并不是什么大不了的事。但是,如果条件是,说...
if(delete_file('foo.png')) {
....
}
if(delete_file('bar.png')) {
....
}
if(delete_file('baz.png')) {
....
}
else {
....
}
嗯,你应该能够看到它的发展方向;)如果你使用elseif
,一旦它变为真,它将停止尝试评估。并且,只有在没有其他条件成立的情况下才会调用else。
答案 6 :(得分:1)
答案很简单:
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!
答案 7 :(得分:0)
明智地使用else可以节省大量时间,因为解析器不需要评估所有条件。