针对“布尔值”进行的运算,只有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
! :
短路现象:
```
- 1、PHP与运行环境介绍
- 1.1.PHP介绍
- 1.2.PHP运行环境介绍
- 1.3.几个不同的PHP运行环境
- 2、Apache的安装、配置与管理
- 2.1.PHP运行环境安装总体目录规划
- 2.2.Apache的安装
- 2.3.Apache的配置
- 2.4.Apache的启动和停止
- 2.5.认识几个相关概念
- 2.6.网站访问流程
- 3、PHP的安装与配置(重点)
- 3.1.PHP的安装
- 3.2.配置Apache使Apache可以调用PHP
- 3.3.PHP的基本配置
- 3.4.查看php执行环境
- 4、MySQL的安装与配置
- 4.1.php.ini中设置mysql数据库模块
- 4.2.MySQL的安装
- 4.3.MySQL的配置
- 4.4.测试在PHP中连接MySQL数据库
- 5、多站点虚拟主机配置
- 5.1.默认的初始站点配置
- 5.2.多站点虚拟主机的含义
- 5.3.配置多站点虚拟主机
- 6、PHP基本语法规则
- 6.1.PHP标记
- 6.2.PHP语句结束符
- 6.3.PHP注释
- 7、变量
- 7.1.含义与定义形式
- 7.2.变量的命名规则
- 7.3.变量的4种基本操作
- 7.4.变量传值(难点)
- 7.5.预定义变量
- 7.6.可变变量
- 8、常量
- 8.1.常量的含义
- 8.2.常量的两种定义形式
- 8.3.常量的两种取值形式
- 8.4.变量与常量的区别
- 8.5.判断一个常量是否存在:defined();
- 8.6.预定义常量
- 8.7.几个魔术常量
- 9、数据类型
- 9.1.数据类型分类与概述
- 9.2.整型integer/int
- 9.3.浮点型double/float
- 9.4.布尔型boolean
- 9.5.字符串型string
- 9.6.数组类型array
- 9.7.空类型NULL
- 9.8.类型判断
- 9.9.类型转换
- 10、运算符详解
- 10.1.概述
- 10.2.赋值运算符
- 10.3.算术运算符
- 10.4.连接运算符( . )
- 10.5.自赋值运算符
- 10.6.自操作(自加自减)运算符
- 10.7.比较运算符
- 10.8.逻辑运算符
- 10.9.条件运算符
- 10.10.位运算符(了解)
- 10.11.错误抑制符@
- 10.12.运算符的优先级
- 11、流程控制
- 11.1.流程控制概述
- 11.2.if语句(重点)
- 11.3.分支结构之switch分支语句(重点)
- 11.4.循环结构之while循环语句
- 11.5.循环结构之do while循环语句
- 11.6.循环结构之for循环语句(重点/难点)
- 11.7.多重循环及案例
- 11.8.循环的中断
- 12、函数
- 12.1.函数的概念与作用
- 12.2.函数的定义与调用
- 12.3.函数执行原理(重点/难点)
- 12.4.函数参数(重点)
- 12.5.函数返回值(重点)
- 12.6.可变函数
- 12.7.匿名函数
- 12.8.常用系统函数介绍
- 13、函数相关
- 13.1.变量的作用域问题(重点)
- 13.2.递归函数/递归思想(重点/难点)
- 14、文件加载
- 14.1.文件加载的含义
- 14.2.文件加载的四种方式(重点)
- 14.3.四种方式的区别
- 15、错误处理
- 15.1.错误分类
- 15.2.常见错误代号(重点)
- 15.3.错误触发
- 15.4.错误显示设置
- 15.5.错误日志设置
- 15.6.自定义错误处理(重点/难点)
- 16、字符串详解
- 16.1.四种不同形式的字符串
- 16.2.转义字符
- 16.3.字符串的长度问题
- 16.4.常用字符串函数(重点)
- 17、数组详解
- 17.1.数组的概念和定义
- 17.2.数组下标问题
- 17.3.PHP数组的维数
- 17.4.数组的遍历(重点)
- 17.5.常用数组函数
- 17.6.数组排序算法(重点/难点)
- 17.7.数组查找算法