当前位置: 代码迷 >> 综合 >> PHP第二天 逻辑与 逻辑或 逻辑非
  详细解决方案

PHP第二天 逻辑与 逻辑或 逻辑非

热度:44   发布时间:2023-10-11 03:53:35.0
<?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,则右侧判断不再进行
      1. 逻辑与(&&):

含义:

表示两个条件(数据)的真假结果是否同时为真的共同作用结果。

运算结果:只有两个条件都为真的时候,结果才是真(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 ){....}

 

      1. 逻辑或(||):

含义:

表示两个条件(数据)的真假结果的是否存在“真”的情况的共同作用结果。

运算规则:

只要有任意一个条件为真(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>

 

      1. 逻辑非(!):

就是对一个布尔值进行“取反”操作,规则为:

!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,  空数组,

还是查手册》附录》类型比较表:

 

  相关解决方案