Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:每一行都有有生命的, 程序员就是给程序添加了生命力
序号 | 运算符 | 示例 | 描述 |
---|---|---|---|
1 | + |
$a+$b |
$a与$b 的和 |
2 | - |
$a-$b |
$a与$b 的差 |
3 | * |
$a*$b |
$a与$b 的积 |
4 | / |
$a/$b |
$a与$b 的商 |
5 | % |
$a%$b |
$a与$b 的余(模) |
6 | ++ |
$a++/++$a |
先用再加/先加再用 |
7 | -- |
$a--/--$a |
先用再减/先减再用 |
8 | ** |
2**4 |
幂运算:2 的 4 次方 |
$a++
=>$a = $a + 1
, $a--
=>$a = $a - 1
**
: 幂运算需要 php5.6+
版本演示代码
<?php
// 赋值
$a = 10;
$b = 15;
// % 取模 就是取余数
echo $b%$a .'<br>'; //输出 5 15/10=1 余5
// $a++ ++$a 自增
// $a++ 先用后加
echo $a++.'<br>' ; //输出 10
/*
等同于
echo $a; //先输出
$a = $a+1 ; //再加一
*/
echo $a.'<br>'; //输出 11
// ++$a 先加后用
$c = 20;
echo ++$c.'<br>'; //输出 21
/*等同于
$c = $c + 1 ; //先加1
echo $c ; //再输出
*/
运算符 | 示例 | 描述 |
---|---|---|
. |
$str1 . $str2 |
连接运算,返回连接之后的字符串 |
序号 | 运算符 | 示例 | 描述 |
---|---|---|---|
1 | = |
$a = 10 |
将表达式的值赋给变量 |
2 | += |
$a += 10 |
$a = $a + 10; |
3 | -= |
$a -= 10 |
$a = $a - 10; |
4 | *= |
$a *= 10 |
$a = $a * 10; |
5 | /= |
$a /= 10 |
$a = $a / 10; |
6 | %= |
$a %= 10 |
$a = $a % 10; |
7 | .= |
$a .= 'a' |
$a = $a . 'a'; |
代码
<?php
// 赋值
$a = 10;
$b = 15;
// +=
$a += 10;
/**等同于
* $a = $a + 10 ;
*/
echo $a ; //输出 20
// .=
$b .= 'abc';
/**等同于
* $b = $b . 'abc';
*/
echo $b ; //输出 15abc
序号 | 运算符 | 示例 | 描述 |
---|---|---|---|
1 | > |
$a > $b |
大于 |
2 | >= |
$a >= $b |
大于或等于 |
3 | < |
$a < $b |
小于 |
4 | <= |
$a <= $b |
小于或等于 |
5 | == |
$a == $b |
等于 (值相等即可) |
6 | === |
$a == $b |
全等于(二边值与类型全等) |
7 | != |
$a != $b |
不相等 |
8 | !== |
$a !== $b |
不全等 |
9 | <=> |
$a <=> $b |
太空船php7+ |
if/while/for...
)<=>
: 也叫组合比较符, 例如$a <=> $b
, 有三种返回结果序号 | 运算 | 结果 |
---|---|---|
1 | $a > $b |
返回>0 的整数 |
2 | $a < $b |
返回<0 的整数 |
3 | $a = $b |
返回=0 的整数 |
演示代码
<?php
// 太空船运算符
// 赋值
$a = 20;
$b = 15;
$ab = $a<=>$b;
// 判断
if ($ab == 1) :
echo 'a>b';
elseif ($ab == 0) :
echo 'a=b';
else :
echo 'a<b';
endif;
序号 | 运算符 | 示例 | 描述 | ||||
---|---|---|---|---|---|---|---|
1 | && |
$a && $b |
逻辑与 | ||||
2 | ` | ` | `$a | $b` | 逻辑或 | ||
3 | ! |
!$a |
逻辑非 | ||||
4 | xor |
$a xor $b |
逻辑异或 |
演示代码
<?php
error_reporting(E_ALL); //打开所有报错
// $name = 'a';
if( isset($name) && $name == "admin"):
echo '管理员'; //name有值且值=admin 显示管理员
elseif ( isset($name) && $name != 'admin'): // 不等于 与上面结果相同
echo '普通用户'; //name有值但值不等于admin 显示普通用户
else:echo '未登录'; //name变量为空或没有name变量 显示未登录
endif;
#当前满足第三条 运行结果 未登录
echo '<hr>';
// 逻辑运算符 ||
$wechat = '1'; //微信
$tel = '1'; //手机号
$email = '1'; //邮箱
if ( $wechat === '' || $tel === '' || $email === '' ): //如果三个变量其中有一个为空,那么输出当前账户未绑定手机/微信/邮箱
echo '当前账户未绑定手机/微信/邮箱';
else: echo '账户很安全'; //如果三个变量均不为空,那么输出账户很安全
endif;
//当前三个值都有变量 输出 账户很安全
echo '<hr>';
序号 | 运算符 | 示例 | 描述 | 场景 |
---|---|---|---|---|
1 | ?: |
$a ?: $b |
仅判断表达式true/false |
简化双分支 |
2 | ?? |
$a ?? $b |
判断变量存在且不为 null |
设置默认值 |
演示代码
// 三元运算符 ?:
$realname = '1';
$password = '';
$problem = '';
$r = 1;
// 用if写
// if( $realname === '' || $password === '' || $problem === ''){
// echo '当前账户存在隐患,具体原因如下:'.'<br>';
// if ($realname === '') {
// echo $r++.'.未实名'.'<br>';
// }
// if ($password === '') {
// echo $r++.'.未设置密码'.'<br>';
// }
// if ($problem === '') {
// echo $r++.'.未添加安全问题'.'<br>';
// }
// }
// 使用三元运算符简写
echo $realname === '' || $password === '' || $problem === ''?
'当前账户存在隐患,具体原因如下:'.'<br>':'';
echo $realname ==='' ? $r++.'.未实名'.'<br>' : '' ;
echo $password ==='' ? $r++.'.未设置密码'.'<br>':'';
echo $problem ===''?$r++.'.未添加安全问题'.'<br>':'';
echo '<hr>';
// 三元运算符 ??
# $username = '我爱php';
// 输出、判断有没有设置用户名,如果有显示用户名,如果没有显示默认名
// 使用 ?: 写
// echo $username = isset($username) ? $username : '木有昵称';
//输出 检测变量名是否存在且值不为null 存在直接输出 不存在输出木有昵称
// 当前该变量已被注释不存在,则输出 木有昵称
# 用三元运算符??简化上面代码
echo $username = $username ?? '木有昵称';
// 值相同,完美
<?php
error_reporting(E_ALL); //打开所有报错
// 第一个例子name值为admin显示管理员,值为其他显示其他用户,没有值则显示未登录
$name = '';
if(isset($name) && $name === 'admin') :
echo '管理员'.$name; //name值等于admin 输出
elseif (isset($name) && !empty($name)):
echo '普通用户'.$name; //有name值 且不为空 输出
else : echo '未登录'; //没有name变量 或 name值为空、null false
endif;
echo '<hr>';
// 第二个例子 三个变量都存在且有值则输出账户很安全否则输出账号危险
// 还要判断值的格式是否正确
$wechat = '1'; //微信
$tel = '1'; //手机号
$email = '1@qq.com'; //邮箱
$i = 1;
// 检测WeChat是否存在值、手机号是否存在值且值的格式是否为整数、邮箱是否存在值且值的格式是否为邮箱
//都通过则显示账户安全,否则存在隐患
if (isset($wechat)&&$wechat != '' && isset($tel) && filter_var($tel,FILTER_VALIDATE_INT)&&isset($email)&& filter_var($email,FILTER_VALIDATE_EMAIL)) {
echo '账户安全';
}else {
echo '当前账户存在安全隐患,具体原因如下:'.'<br>';
}
// 检测$WeChat是否存在值,存在则不提示,不存在提示未设置
echo isset($wechat) && !empty($wechat) ? null : $i++ .'.微信账号未设置'.'<br>';
// 检测$tel是否存在值,存在则不提示,不存在提示未设置
if (!isset($tel) && empty($tel)) :
echo $i++ . '.手机号未设置'.'<br>';
// 检测$tel值类型是否正确,正确则不提示,不正确提示格式错误
elseif (isset($tel) && !filter_var($tel,FILTER_VALIDATE_INT)) :
echo $i++ . '.手机号格式错误'.'<br>';
endif;
// 检测$email是否存在值,存在则不提示,不存在提示未设置
if (!isset($email) && empty($email)) :
echo $i++ . '.邮箱未设置'.'<br>';
// 检测$email值类型是否正确,正确则不提示,不正确提示格式错误
elseif(isset($email)&& !filter_var($email,FILTER_VALIDATE_EMAIL)):
echo $i++ . '.邮箱格式错误'.'<br>';
endif;
echo '<hr>';
# 3. 若用户有昵称则原样输出,没有则显示默认昵称
$name = '我爱PHP';
echo $name = isset($name) && empty($name) ?'木有昵称':$name;
运算符 | 示例 | 描述 | 场景 |
---|---|---|---|
@ |
@(10/0) |
屏蔽所有运行错误 | 线上生产环境 |
序号 | 类型 | 语法 | 模板语法 |
---|---|---|---|
1 | 单分支 | if(){...} |
if(): ... endif; |
2 | 双分支 | if(){...} else {...} |
if(): ... else: ... endif; |
3 | 多分支 | if(){...} elseif {...} else {...} |
if(): ... elseif: ... else: ... endif; |
4 | switch |
switch() {case: ... break...} |
switch(): ...endswitch; |
switch
改写上面的多分支并进行再次优化
$problem; //创建一个‘安全’变量
$wechat = '1'; //微信
$tel = '1'; //手机号
$email = '1@qq.com'; //邮箱
$i = 1;
// 检测WeChat是否存在值、手机号是否存在值且值的格式是否为整数、邮箱是否存在值且值的格式是否为邮箱
//都通过则显示账户安全,否则存在隐患
$problem = isset($wechat)&& !empty($wechat) && isset($tel) && filter_var($tel,FILTER_VALIDATE_INT)&&isset($email)&& filter_var($email,FILTER_VALIDATE_EMAIL) ? $problem = '账户安全'.'<br>' : $problem = '当前账户存在安全隐患,具体原因如下:'.'<br>';
// 判断微信
$wechat = isset($wechat) && !empty($wechat) ? null : $i++ .'.微信账号未设置'.'<br>';
// 判断手机号
switch (true) {
case isset($tel) && empty($tel) :
$tel = $i++ . '.手机号未设置'.'<br>';
break;
case isset($tel) && !filter_var($tel,FILTER_VALIDATE_INT) :
$tel = $i++ . '.手机号格式错误'.'<br>';
break;
default:
$tel = null;
}
// 判断邮箱
switch (true) {
case isset($email) && empty($email) :
$email = $i++ . '.邮箱未设置'.'<br>';
break;
case isset($email)&& !filter_var($email,FILTER_VALIDATE_EMAIL) :
$email = $i++ . '.邮箱格式错误'.'<br>';
break;
default:
$email = null;
}
// 输出
echo $problem , $wechat ,$tel , $email ;
序号 | 类型 | 语法 | 模板语法 |
---|---|---|---|
1 | 入口判断型 | while(){...} |
while(): ... endwhile; |
2 | 出口判断型 | do {...} while(); |
do : ... while(); |
3 | 计数型 | for(){...} |
for () : ... endfor; |
循环控制关键字:
序号 | 关键字 | 描述 |
---|---|---|
1 | continue |
终止本次循环,提前进入下一轮 |
2 | break |
跳出本层循环 |
current()
获取数组当前值
next()
指针下移
reset()
重置指针
出口判断型 无论条件是否为真,至少会执行一次
count()
可以打印出数组的数量
演示代码
$sities = ['武汉','南京','济南','合肥','上海','杭州'] ;
while ($sity = current($sities)) {
echo $sity .'<br>';
next($sities);
}
reset($sities);
echo '<hr>';
echo '<hr>';
// 利用循环写九九乘法表
for ($i=1; $i <= 9; $i++) {
for ($j=1; $j <=9 ; $j++) {
echo $j .'*'.$i .'='.$i*$j .' ; ';
if ($i === $j) break;
}
echo '<br>';
}
效果图
switch
可以简化elseif ,主要是用来判断单值