官方网站手机,临汾花果街网站建设,建筑设计说明万能模板,wordpress物流主题引言
决策是生活不可缺少的一部分。从平凡的着装决定#xff0c;到改变人生的工作和家庭决定。在开发中也是如此。要让程序做任何有用的事情#xff0c;它必须能够对某种输入做出响应。当用户点击网站上的联系人按钮时#xff0c;他们希望被带到联系人页面。如果什么都没有…引言
决策是生活不可缺少的一部分。从平凡的着装决定到改变人生的工作和家庭决定。在开发中也是如此。要让程序做任何有用的事情它必须能够对某种输入做出响应。当用户点击网站上的联系人按钮时他们希望被带到联系人页面。如果什么都没有发生或者他们被带到错误的页面用户可能会选择完全停止使用该网站或公司。
在代码中编写决策时使用的是条件语句:“如果x则y”。即使是单击一个按钮也是一种条件语句:“如果单击该按钮则跳转到某个页面。”条件语句是计算机程序逻辑、决策或流程控制的一部分。你可以把条件语句比作一本“选择你自己的冒险”的书或流程图。
让我们看一些使用条件语句的例子
如果学生考试成绩超过65%报告她的成绩及格;如果没有就报告她的成绩不及格。如果账户中有存款计算利息;如果透支了要收取罚款。如果他们购买10个或更多的橙子计算5%的折扣;如果他们少买那就不要买。检查用户所在的位置并根据国家显示正确的语言。提交时发送表单或者在缺失的必填字段旁边显示警告信息。在单击事件中打开下拉菜单或者关闭已经打开的下拉菜单。显示酒店的预订表单但不显示酒店是否已预订。
当评估条件并根据这些条件是否满足来分配代码运行时我们编写的是条件代码。
本教程将首先概述用于构建条件语句的比较运算符。接下来它将带你使用PHP编写条件语句包括if、else和elseif关键字。这也包括使用逻辑运算符and or or来组合条件。最后还会介绍一些特殊的条件运算符以更精确地描述一种情况。
比较操作符概述
条件语句(conditional statement)计算一个条件是否为true或false。这通常是两个值比较的结果。顾名思义比较操作符用于比较两个值。PHP是一种* 松散类型 *语言这意味着默认情况下PHP将尝试更改数据类型以匹配预期结果。这被称为类型杂耍在使用比较操作符时变得非常重要。例如以下所有值都被认为是相等的尽管它们的类型不同
false
0
0.0PHP提供了一些比较操作符来表达对value和type/value组合的所需比较
是在类型中相等在类型更改之后意味着前一个代码块中的所有值都是相等的。是在类型和值中都是相同的这意味着前面的值都不相同因为它们都是不同的类型。!或值是不相等的类型变换。作为相等的反义词比较false ! 0会被判定为false因为两个值是匹配的。!是在类型和值中都不相同的。比较false ! 0会被求值为true因为虽然这两个值求值相同但类型不同。
**注意**请特别注意感叹号!它的作用是否定其他条件。
除了相等和相同之外PHP还提供了比较操作符来表达值之间的关系。
小于 用于表示5 6是真的。大于 用于表示5 4是真的。小于或等于 用于表示5 5和5 6都是真。大于或等于 用于表示5 5和5 4都为真。
现在我们知道了什么是比较操作符可以看看如何使用它们来编写条件语句了。
编写条件语句
比较运算符与if、else和elseif关键字结合使用可以构建控制程序流程的条件语句。
使用if语句
当我们希望仅在满足某个条件时执行一段特定的代码时我们使用条件语句if然后是括号()中的条件然后是花括号{}中要执行的代码。只有当条件求值为true时条件语句中的代码才会执行。当条件不是true时条件语句中的代码将被忽略并在条件语句结束后继续处理。让我们看看代码会是什么样子
if ($inventory 0) {echo Add to Cart;
}字符串“Add to Cart”只会在变量$inventory包含一个大于0的数字时显示。 另外如果条件后面只有一个表达式PHP允许我们完全省略大括号。PHP将执行条件之后的第一个表达式以分号结尾。这包括它们之间的空白。下面的代码的计算方式与前面的例子相同
if ($inventory 0) echo Add to Cart;使用else语句
当我们希望执行一段特定的代码或另一段代码时我们在条件语句if中添加一个else块。只有当语句的计算结果为true时if块中的代码才会执行而else块中的代码只有当语句的计算结果为true时才会执行。让我们看一个例子如果购物者购买10件或更多商品就会获得折扣
if (count($cart) 10) {$discount $subtotal * .3;
} else {$discount 0;
}当购物车中的商品数量大于或等于10时语句求值为true并根据$subtotal计算30%的折扣。当购物车中的商品数量小于10时语句求值为false然后执行else代码块这没有折扣。比较也可以写成count($cart) 9。
**注意**在计算百分比时不能使用百分号%因为%用于计算模即$a除以$b的余数 3% % 8 2。相反要计算百分比只需将百分比除以100将其转换为小数。所以30%就是30/100或者0.30或者0.3。
添加一个else块有时会使代码更加混乱。值得考虑的是我们是否可以在没有else块的情况下完成相同的事情。例如前面的条件也可以写成下面这样
$discount 0;
if (count($cart) 10) {$discount $subtotal * .3;
}我们为折扣设置了默认值0并仅在满足条件时更改它。
使用elseif语句
当需要第二个条件时可以添加第二个条件语句
$discount 0;
if (count($cart) 5) {$discount $subtotal * .15
}
if (count($cart) 10) {$discount $subtotal * .3;
}当以这种方式添加第二条语句时PHP必须检查每条语句即使第一条语句已经匹配。如果购物车中有14件商品第一个条件语句将求值为’ true 因为14大于或等于5这将把折扣设置为15%。之后第二个条件语句也会计算为true因为14也大于或等于10再次将折扣设置为30%。
如果条件的顺序不对也可能返回错误的折扣。当有可能匹配多个条件时最好仔细检查一下是否按正确的顺序计算了这些条件。
通过使用elseif代码块可以更清晰地说明和评估代码
$discount 0;
if (count($cart) 10) {$discount $subtotal * .3;
} elseif (count($cart) 5) {$discount $subtotal * .15
}在这个例子中代码首先检查是否有大于或等于10的值。如果第一个语句的计算结果为true则执行第一个条件块中的代码而其他条件语句永远不会计算。只有当第一个条件不满足时才计算下一个条件。 一个条件语句可以有任意多个elseif条件但只能有一个else。
嵌套条件语句
就像套娃一样条件语句可以包含其他条件语句“嵌套”其中。嵌套条件语句时使用一致的缩进极大地提高了可读性。让我们扩大折扣范围提供更多选择
$discount 0;
if ($country China) {if (count($cart) 10) {if ($coupon_discount .3) {$discount $subtotal * $coupon_discount;} else {$discount $subtotal * .3;}} elseif (count($cart) 5) {if ($coupon_discount .15) {$discount $subtotal * $coupon_discount;} else {$discount $subtotal * .15}}
}在这个例子中折扣仅适用于中国所以在我们检查折扣之前我们首先验证$country变量是否被设置为China。只有当第一个条件为true时其余的条件才会被满足。
接下来我们检查购物车中的商品数量是否大于或等于10。如果第二个条件为true那么我们检查$coupon_discount的值是否大于订购10个或更多商品时正常情况下的30%折扣。如果第三个条件为true那么使用$coupon_discount来计算$discount。否则第三个条件为false然后使用正常的30%来计算折扣。
这将我们带到了第二个条件的else块。与else不同elseif区块用于在给予二次折扣之前验证购物车中的商品数量大于或等于5。我们再次检查$coupon_discount变量中的值是否大于二次批量折扣(15%)。如果第四个条件为真$coupon_discount将用于计算$discount。否则第四个条件为false则我们到达最后一个15%的折扣。
嵌套条件语句(就像我们刚刚看到的那样)可能很难理解特别是当你开始添加额外的级别时。如果可能的话考虑如何重写条件语句以消除嵌套。前面的条件也可以写成
$discount 0;
if ($country ! China) {// 非中国店不打折
} elseif ($coupon_discount .3) {$discount $subtotal * $coupon_discount;
} elseif (count($cart) 10) {$discount $subtotal * .3;
} elseif ($coupon_discount .15) {$discount $subtotal * $coupon_discount;
} elseif (count($cart) 5) {$discount $subtotal * .15;
}因为PHP允许一个空的条件块我们可以首先检查国家并跳过任何其他条件。注意否定词!表示该国家与值China不匹配。虽然可以让一个块完全为空但添加注释可以解释为什么要让该块为空。
对于elseif区块我们从最严格的开始一直往下。在中国如果某人的优惠券价值20% (.2)那么前3个区块将被评估为false。然后它们会到达第三个elseif它会被评估为true因为.2大于.15。折扣率将被计算出来并传递最后一个条件块。
替代语法
如前面的例子所示条件语句最常见的语法是使用大括号。PHP确实提供了一种替代语法当每个条件语句之间有很长的代码块时或者当在条件语句中使用同样使用大括号的循环时它可以使代码更易于阅读。这种替代语法在条件语句之后使用冒号编写并以endif;语句结束条件块。discount示例可以使用这种替代语法编写如下
$discount 0;
if ($country ! China)// 非中国店不打折
elseif ($coupon_discount .3)$discount $subtotal * $coupon_discount;
elseif (count($cart) 10)$discount $subtotal * .3;
elseif ($coupon_discount .15)$discount $subtotal * $coupon_discount;
elseif (count($cart) 5)$discount $subtotal * .15;
else$discount $subtotal * .05;
endif;虽然在这些条件块中嵌套循环是可以接受的但在这些条件块中嵌套大括号条件可能会导致意想不到的结果。最好还是使用花括号或冒号。
**注意**由于PHP处理空格的方式当使用大括号时它将接受else和if之间的空格}else if(…){。但是如果在使用冒号定义语句时使用空格 elseif(…):PHP将会解析失败。在实践中最好避免空格并始终将其写成单独的elseif。
其他的比较操作符
在每个条件语句中都使用一个比较操作符并不是使用比较操作符的唯一方式。我们不仅可以组合条件还可以在条件语句之外使用比较操作符。
使用逻辑运算符组合条件
当有多个条件都需要为真或者多个条件的影响相同时可以使用逻辑运算符将这些条件语句组合成一个块。
And And表示两个条件都必须为true。Or Or表示有一个条件为true或者两个条件都为true。Xor Xor表示只有一个条件为true。Not !用来否定一个条件这会将其从true变为false。And 表示两个条件都必须为true。Or ||表示有一个条件为true或者两个条件都为true。
and和or操作符之所以有两种不同的变体是因为它们以不同的优先级进行操作。运算符的优先级指定了它将两个表达式绑定在一起的“紧密程度”或者运算符的求值顺序。(操作符优先级参见文档。)两种方式都是完全可以接受的并且在大多数情况下都是一样的。PHP中的运算符是不区分大小写的这意味着运算符也可以写成OR(或者甚至是OR或OR我不建议使用这两种写法)。为了减少混乱最重要的是无论你选择什么都要保持一致。我将在例子中使用’ and ‘和’ or 因为它们读起来更自然。 在折扣示例中使用:为了检查变量$country是否都被设置为China以及购物车中的商品是否大于等于10可以使用and操作符组合这些条件
$discount 0;
if ($country China and count($cart) 10) {$discount $subtotal * .3;
}这个例子有两个条件$country China和count($cart) 10。如果这两个条件都为true则该块中的代码将被执行。这个例子使用了and操作符但它也可以使用and甚至操作符结果完全相同。
我们还可以组合得到相同结果的条件。如果购物车中有10件或10件以上的商品可以获得30%的折扣或者小计金额在100元或以上也可以获得30%的折扣可以将这些条件组合起来
$discount 0;
if (count($cart) 10 or $subtotal 100) {$discount $subtotal * .3;
}两个以上的条件也可以结合然而在使用它们时要格外谨慎。让我们试着将country评估、购物车数量和小分类比较结合起来
# BAD
$discount 0;
if ($country China and count($cart) 10 or $subtotal 100) {$discount $subtotal * .3;
}这个例子实际上并没有按照预期的方式工作因为首先使用cart的计数来计算国家然后使用or对小类总数进行比较。这意味着无论country或count的值是什么如果$subtotal大于或等于100整个条件语句将计算为true。
可以使用括号来确保条件按预期的顺序执行
$discount 0;
if ($country China and (count($cart) 10 or $subtotal 100)) {$discount $subtotal * .3;
}现在通过小计比较来评估cart计数然后根据结果来评估国家。这提供了所需的结果要求$country的值为China然后购物车的计数或小计的比较(或两者)也必须计算为true。
有时比较两个值并不需要整个条件块。PHP提供了一些简写比较操作符来更精确地描述一种情况。
三元运算符
当一个表达式为true时应该有一个结果而同一个表达式为false时应该有另一个结果时可以使用三元运算符。如果expr1求值为true表达式ddd求值为expr2如果expr1求值为false表达式(expr1) ? (expr2) : (expr3)求值为expr3。假设访问者的用户名应该显示如果他们已登录则应该显示单词“Guest”。函数isset将帮助我们评估这个条件因为它将检查变量是否实际被定义。如果变量被定义了isset返回true;否则isset返回false
echo (isset($username)) ? Guest : $username;这和if/else语句是一样的
if (isset($username)) {echo Guest;
} else {echo $username;
}可以省略三元运算符的中间部分。如果expr1求值为true表达式expr1 ?: expr3返回expr1否则返回expr3。要显示用户名或单词“Guest”三元运算符如下所示
echo $username ?: Guest;如果$username设置为空字符串这是有效的但如果$username根本没有设置我们会得到一个错误。在这种情况下不能使用isset函数因为isset($username)的输出将是true或false而不是$username的值。这就引出了下一个操作符。
Null合并运算符
null合并运算符(??)被添加为“语法糖”(虽然很甜但不是必需的)以满足需要与isset()一起使用三元运算符的常见情况。如果存在且不是null则返回第一个操作数;否则返回第二个操作数。要显示用户名或单词“Guest”可以使用null合并操作符
echo $username ?? Guest;三向比较运算符
The spaceship operator () is used for comparing two expressions: $a $b. It returns -1, 0, or 1 when $a is respectively less than (), equal to (), or greater than () $b 三向比较运算符()用于比较两个表达式:$a $b。当$a分别小于()、等于()或大于()$b时它返回-1、0或1
echo 1 1; // 0
echo 1 2; // -1
echo 2 1; // 1**警告:**虽然三向比较运算符不常使用但在编写“用户自定义排序”(usort)函数时它非常方便。下面的示例包含了您可能还不熟悉的其他概念。如果你现在没有完全理解代码也不用担心。我将解释这个示例中发生了什么我们将在后面的教程中更深入地介绍这些概念。 让我们创建一个新产品的数组。反过来数组中的每个产品都是自己的产品属性嵌套数组
$products [[nameFlippers, price7.99],[nameWet Suit, price18.99),[nameSnorkel, price2.99),[nameMask, price6.99),
];现在假设我们想要按照每个商品的价格降序对$products数组进行排序。我们可以通过使用usort函数来做到这一点然后我们向该函数传递一个处理排序逻辑的匿名函数。让我们看一下代码
usort($products, function($item1, $item2) {return $item2[price] $item1[price];
});usort函数接受两个参数(传递给函数的值)。第一个参数是$products数组。第二个是一个匿名函数它告诉usort函数如何处理数组中的每个元素。如果$item2的价格小于$item1的价格运算符将返回-1这将把$item2移动到$item1之前。如果价格相同运算符将返回0这将使物品保持相同的顺序。最后如果$item2的价格大于$item1运算符将返回1这将把$item2放在$item1之后这仍然是他们开始时的顺序。 为了按价格升序排序我们翻转了$item1和$item2的位置从而改变了比较的顺序
usort($products, function($item1, $item2) {return $item1[price] $item2[price];
});总结
条件语句为我们提供了流控制以确定程序的输出选择。它们是编程的基本构件之一几乎在所有编程语言中都可以找到。 本教程涵盖了用于比较值的比较操作符和用于组合条件的逻辑操作符。它演示了if、else和elseif关键字在查看嵌套语句和组合条件时的使用。最后介绍了其他比较运算符的使用包括三元运算符、null合并运算符和三向比较运算符。继续练习条件语句
尝试使用不同的运营商: , , , 使用and或or组合运算符使用三元运算符、null合并运算符和三向比较运算符重新创建一个if语句