<?php
// 假设给定一个整数表示一个员工的年龄,
// 如果该年龄为整十的数,
// 或者年龄的平方除以100在10~20之间,
// 则公司在当年年底会给该员工发特别奖。
// 请写出程序来判断某个年龄的员工是否可以得奖。$age = 71; //当age为20,30,就会发生短路if($age % 10 ==0 || $age*$age/100>=10 && $age*$age/100<=20){echo "可以获奖";}else{echo "不可以获奖";}echo "<hr>";if( $age*$age/100<=20 || $age*$age/100>=10 && $age % 10 ==0){echo "可以获奖";}else{echo "不可以获奖";}
?>
结论:
我们应该将我们可能发生短路运算的逻辑判断的前后判断语句,做如下调整:
相对简单的运算放前面(左侧),相对复杂的运算放后面(右侧)。
对于逻辑或的短路运算,道理一样。
逻辑运算的短路规则:短路的基本概念:就是对于“逻辑与” 或 “逻辑或”这两种运算符,他们可能会只进行左侧的逻辑判断之后,立即就中断后续 (右侧)的判断,而得出整个逻辑运算符的运算结果!逻辑与的短路:if ( 左侧判断 && 右侧判断 ) //此时,如果左侧判断为false,则右侧判断不再进行逻辑或的短路:if ( 左侧判断 || 右侧判断 ) //此时,如果左侧判断为true,则右侧判断不再进行
-
-
- 逻辑与(&&):
-
含义:
表示两个条件(数据)的真假结果是否同时为真的共同作用结果。
运算结果:只有两个条件都为真的时候,结果才是真(true)。
只有如下4种情况:
true && true 结果为 true
true && false 结果为 false
false && true 结果为 false
false &&false 结果为 false
总结归纳出逻辑与(&&)的真值表(就是公式,类似99乘法表):
| $v1, $v2表示任意变量(条件) |
$v1 = true时 |
$v1 = false时 |
| $v2 = true时 |
$v1 && $v2 :true |
$v1 && $v2 :false |
| $v2 = false时 |
$v1 && $v2 :false |
$v1 && $v2 :false |
可见:逻辑与运算的结果,只有两个是真,才是真。
实际应用中,往往是以“条件”的面目出现,而不是简单的真假值。
案例:
给定一个任意整数,请判断该数是否能被3整除并且还能被5整除!
$v1 = 18;
if( $v1 % 3 == 0 && $v1 % 5 == 0 ){....}
-
-
- 逻辑或(||):
-
含义:
表示两个条件(数据)的真假结果的是否存在“真”的情况的共同作用结果。
运算规则:
只要有任意一个条件为真(true),结果就是真。
只有如下4种情况:
true || true 结果为 true
true || false 结果为true
false || true 结果为 true
false ||false 结果为 false
总结归纳出逻辑或(||)的真值表(就是公式,类似99乘法表):
| $v1, $v2表示任意变量(条件) |
$v1 = true时 |
$v1 = false时 |
| $v2 = true时 |
$v1 || $v2 :true |
$v1 || $v2 :true |
| $v2 = false时 |
$v1 || $v2 :true |
$v1 || $v2 :false |
可见:逻辑或运算的结果,只要有一个是真,就是真。
实际应用中,往往也是以“条件”的面目出现,而不是简单的真假值,比如:
$v1 = 18; //请判断该数是否能被3整除或能被5整除!
if( $v1 % 3 == 0 || $v1 % 5 == 0 ){....}
案例:
给定一个整数表示年份,请判断该年份是否为闰年。
(注:闰年是能被4整除但不能被100整除的年,或者能被400整除的年。)
<body>
<form action="" method="post">
请输入年份:<input type="text" name="year">
<input type="submit" value="判断">
</form>
<?php
if( !empty($_POST['year']))
{
$year = $_POST['year']; //永远是字符串!
if(is_numeric($year))
{
$year2 = (int)$year;
if($year2 == $year)
{
if($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0)
{
echo $year . "是闰年。";
}
else
{
echo "{$year}不是闰年。";
}
}
else
{
echo "年份应该为整数!";
}
}
else
{
echo "请输入整数!";
}
}
else
{
echo "<font color='red' >请输入年份</font>";
}
?>
</body>
</html>
-
-
- 逻辑非(!):
-
就是对一个布尔值进行“取反”操作,规则为:
!true 结果为false
!false 结果为true
逻辑非(!)在if中的常见应用情形:
if( !isset( $v1 ) ){....} //如果$v1为空(null)
if( !empty( $v1 ) ){...} //如果$v1不为空(empty)
对应的两个相反的情形是:
if( isset( $v1 ) ){....} //如果$v1存在
if( empty( $v1 ) ){...} //如果$v1为空(empty)
区分两个“空”:
null: “真空”,什么都没有,是明确定义的“没有数据”的一种写法(含义)
empty:“现实意义上的没有”,就是无,就是0,等等,常见的,认为是empty的数据有:
“”(空字符串), 0, 0.0, “0”, false, null, 空数组,
还是查手册》附录》类型比较表: