企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
针对“布尔值”进行的运算,只有3个: * 与: && * 或: || * 非: ! 如果不是布尔值,会自动转换为布尔值去进行运算。 因为布尔值只有2个,不管怎么排列组合,最终只有以下10种情况的计算,几乎就是公式化。 ## 5.8.1.逻辑与(&&): 含义: 表示两个条件(数据)的真假结果是否同时为真的共同作用结果。 ``` 运算结果:只有两个条件都为真的时候,结果才是真(true)。 ``` 只有如下4种情况: ``` true && true 结果为 true true && false 结果为 false false && true 结果为 false false &&false 结果为 false ``` 总结归纳出逻辑与(&&)的真值表(就是公式,类似99乘法表): ![](https://img.kancloud.cn/54/f2/54f2ce576bf761b6e7c519e9943726f2_940x98.png) 可见:逻辑与运算的结果,只有两个是真,才是真。 实际应用中,往往是以“条件”的面目出现,而不是简单的真假值。 案例: 给定一个任意整数,请判断该数是否能被3整除并且还能被5整除! ``` $v1 = 18; if( $v1 % 3 == 0 && $v1 % 5 == 0 ){....} ``` ![](https://img.kancloud.cn/cf/45/cf4526cb55a437a9304110583eeea08d_607x306.png) ## 5.8.2.逻辑或(||): 含义: 表示两个条件(数据)的真假结果的是否存在“真”的情况的共同作用结果。 运算规则: ``` 只要有任意一个条件为真(true),结果就是真。 ``` 只有如下4种情况: ``` true || true 结果为 true true || false 结果为true false || true 结果为 true false ||false 结果为 false ``` 总结归纳出逻辑或(||)的真值表(就是公式,类似99乘法表): ![](https://img.kancloud.cn/a1/76/a176c81c4c38059ba3142ab137949098_939x99.png) 可见:逻辑或运算的结果,只要有一个是真,就是真。 实际应用中,往往也是以“条件”的面目出现,而不是简单的真假值,比如: ``` $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> ``` ## 5.8.3.逻辑非(!): 就是对一个布尔值进行“取反”操作,规则为: ``` !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, 空数组, ``` 还是查手册》附录》类型比较表: ![](https://img.kancloud.cn/e7/8a/e78a9b7415bd04bcdf37d5e6ac0cf60a_863x591.png) ## 5.8.4.逻辑运算的短路规则: 短路的基本概念: 就是对于“逻辑与” 或 “逻辑或”这两种运算符,他们可能会只进行左侧的逻辑判断之后,立即就中断后续(右侧)的判断,而得出整个逻辑运算符的运算结果! 逻辑与的短路: ``` if ( 左侧判断 && 右侧判断 ) //此时,如果左侧判断为false,则右侧判断不再进行 ``` 逻辑或的短路: ``` if ( 左侧判断 || 右侧判断 ) //此时,如果左侧判断为true,则右侧判断不再进行 ``` 示例: 假设给定一个整数表示一个员工的年龄,如果该年龄为整十的数,或者年龄的平方除以100在10~20之间,则公司在当年年底会给该员工发特别奖。请写出程序来判断某个年龄的员工是否可以得奖。 ![](https://img.kancloud.cn/12/37/1237357167b1a4869b5938bf6c392fff_684x513.png) 结论: 我们应该将我们可能发生短路运算的逻辑判断的前后判断语句,做如下调整: 相对简单的运算放前面(左侧),相对复杂的运算放后面(右侧)。 对于逻辑或的短路运算,道理一样。 ## 昨日回顾 类型判断: ``` gettype():获得一个变量的类型名称,结果就是类型名称的字符串。 settype($变量, 目标类型):设置一个变量的类型:相当于改变了变量的类型。 var_dump(); is_int(), is_float(), is_string(), is_bool(), is_array(), is_object(), is_null(), is_numeric(): ``` 类型转换: 自动转换:由运算符来决定 强制转换:(目标类型)数据 运算符: 赋值。。。 算术运算符: 连接运算符: 自赋值运算符: ``` += -= *= /= %= .= $v1+= 10; //$v1 = $v1+10; ``` 自操作运算符: ``` ++: ``` 比较运算符: ``` == :相等,松散相等,模糊相等 === :全等于,类型一致,数据相等 ``` 逻辑运算符: ``` &&:只要有一个是false,结果就是false || :只要有一个是true,结果就是true ! : 短路现象: ```