运算符
1. 算术运算符
运算符 |
示例 |
描述 |
+ |
$a+$b |
$a与$b 的和 |
- |
$a-$b |
$a与$b 的差 |
* |
$a*$b |
$a与$b 的积 |
/ |
$a/$b |
$a与$b 的商 |
% |
$a%$b |
$a与$b 的余(模) |
++ |
$a++/++$a |
先用再加/先加再用 |
-- |
$a--/--$a |
先用再减/先减再用 |
** |
2**4 |
幂运算:2 的 4 次方 |
$a++
=>$a = $a + 1
, $a--
=>$a = $a - 1
**
: 幂运算需要 php5.6+
版本
2. 字符串运算符
运算符 |
示例 |
描述 |
. |
$str1 . $str2 |
连接运算,返回连接之后的字符串 |
3. 赋值运算符
运算符 |
示例 |
描述 |
= |
$a = 10 |
将表达式的值赋给变量 |
+= |
$a += 10 |
$a = $a + 10; |
-= |
$a -= 10 |
$a = $a - 10; |
*= |
$a *= 10 |
$a = $a * 10; |
/= |
$a /= 10 |
$a = $a / 10; |
%= |
$a %= 10 |
$a = $a % 10; |
.= |
$a .= 'a' |
$a = $a . 'a'; |
4. 比较运算符
运算符 |
示例 |
描述 |
> |
$a > $b |
大于 |
>= |
$a >= $b |
大于或等于 |
< |
$a < $b |
小于 |
<= |
$a <= $b |
小于或等于 |
== |
$a == $b |
等于 (值相等即可) |
=== |
$a == $b |
全等于(二边值与类型全等) |
!= |
$a != $b |
不相等 |
!== |
$a !== $b |
不全等 |
<=> |
$a <=> $b |
太空船php7+ |
- 比较运算符: 返回布尔值,常用于流程控制中(
if/while/for...
) <=>
: 也叫组合比较符, 例如$a <=> $b
, 有三种返回结果
运算 |
结果 |
$a > $b |
返回>0 的整数 |
$a < $b |
返回<0 的整数 |
$a = $b |
返回=0 的整数 |
5. 逻辑运算符
运算符 |
示例 |
描述 |
&& |
$a && $b |
逻辑与 |
` |
|
` |
`$a |
|
$b` |
逻辑或 |
! |
!$a |
逻辑非 |
xor |
$a xor $b |
逻辑异或 |
6. 三元运算符
运算符 |
示例 |
描述 |
场景 |
?: |
$a ?: $b |
仅判断表达式true/false |
简化双分支 |
?? |
$a ?? $b |
判断变量存在且不为null |
设置默认值 |
7. 错误屏蔽符
运算符 |
示例 |
描述 |
场景 |
@ |
@(10/0) |
屏蔽所有运行错误 |
线上生产环境 |
<?php
//打开错误提示,并输出
error_reporting(E_ALL);
//运算符
//取模/取余数
var_dump(10 % 3); //余数为1
//++,--只能用在变量上
$a = 10;
// ++在变量后面,先引用变量的值,再将变量执行加的运算
var_dump($a++); //输出为 int(10)
var_dump($a); //输出为 int(11)
$a = 10;
var_dump(++$a); //输出为 int(11)
var_dump($a); //输出为 int(11)
echo '<hr>';
// . 字符串连接
echo 'a' . 'b' . '<br>'; // 输出为 ab
echo 'abc' . 28 . '<br>'; // 输出为 abc28
// 用字符串连接创建表格
echo '<hr>';
$user = ['1', '学生', 'php'];
$table = '<table border=1>';
$table .= '<tr>';
$table .= '<td>' . $user[0] . '</td>';
$table .= '<td>' . $user[1] . '</td>';
$table .= '<td>' . $user[2] . '</td>';
$table .= '</tr>';
$table .= '</table>';
echo $table;
echo '<hr>';
// 比较运算符返回布尔类型的值
var_dump(15 > 22); // 输出为 bool(flase)
// 是否相等==, 是否全等===
// ==: 只判断值是否相等, 不判断类型
// 当==二边的类型不同时,会发生类型的自动转换
// var_dump(10 == (int)'10');
// === 全等, 不仅值要相等, 类型也要相等
var_dump(10 === '10'); // 输出为 bool(flase)
echo '<hr>';
// 太空船 <=>
var_dump(10 <=> 20); // 输出为 -1
// -1 < 0, 说明 10 小于 20
var_dump(10 <=> 5); // 输出为 1
// 1 > 0, 说明 10 大于 5
var_dump(10 <=> 10); // 输出为 0
// 0, 说明 相等
echo '<hr>';
// && 理解为乘法, true==>1, false==>0
var_dump(1 < 2 && 5 > 2); // 输出为 bool(true)
// var_dump(true && false);
// || 理解为加法, true==>1, false==>0
var_dump(1 < 2 || 5 > 2); // 输出为 bool(true)
echo '<hr>';
// @ 屏蔽错误提示
// if ($name && $name === 'admin') { 提示错误未定义$name
// echo '登录成功';
// } else {
// echo '登录失败';
// }
// echo '<hr>';
// if (@$name && $name === 'admin') { 未提示错误未定义$name
// echo '欢迎您';
// } else {
// echo '未登录';
// }
// echo '<hr>';
if (isset($name) && $name === 'admin') { // 直接判断$name
echo '欢迎您';
} else {
echo '未登录';
}
echo '<hr>';
// ? : 简化双分支if
$price = 888;
if ($price > 1000) : echo '贵了';
else : echo '便宜';
endif;
echo '<br>';
// 条件 ? true : false;
echo $price > 1000 ? '贵了' : '便宜';
echo '<hr>';
// ?? null合并运算符
// 设置变量默认值
$paw = '123456';
// $paw = isset($paw) ? $paw : 'root';
$paw = $paw ?? 'root';
echo $paw;
echo '<hr>';
- 效果
流程控制
1. 分支结构
序号 |
类型 |
语法 |
模板语法 |
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; |
2. 循环结构
序号 |
类型 |
语法 |
模板语法 |
1 |
入口判断型 |
while(){...} |
while(): ... endwhile; |
2 |
出口判断型 |
do {...} while(); |
do : ... while(); |
3 |
计数型 |
for(){...} |
for () : ... endfor; |
循环控制关键字:
序号 |
关键字 |
描述 |
1 |
continue |
终止本次循环,提前进入下一轮 |
2 |
break |
跳出本层循环 |
<?php
# 分支结构
$a = 5500;
$b = $a;
// 1.单分支
if ($a > 5000) {
$b = $a * 0.6;
}
echo '实际支付: ' . $b . '<br>'; //输出 3300;
// 如果代码体只有一行,可以省略大括号
// if ($a >5000) $b = $a * 0.6;
// 有一种替代语法 : 模板语法, 用在与html代码混编的时候
// 模板语法的目标是: 干掉大括号
if ($a > 5000) :
$b = $a * 0.5;
endif;
echo '实际支付: ' . $b . '<br>'; //输出 2750;
echo '<hr>';
//双分支
$a = 3000;
if ($a > 5000) {
$b = $a * 0.6;
} else {
$b = $a;
}
echo '实际支付: ' . $b . '<br>'; //输出为3000;
// 双分支模板语法
$a = 4000;
if ($a > 5000) :
$b = $a * 0.6;
else :
$b = $a;
endif;
echo '实际支付: ' . $b . '<br>'; //输出为4000;
echo '<hr>';
// 3. 多分支
$a = 15000;
if ($a > 5000 && $a <= 10000) {
$b = $a * 0.6;
} elseif ($a > 10000 && $a <= 20000) {
$b = $a * 0.5;
} elseif (($a >= 20000)) {
$b = $a * 0.2;
} else {
$b = $a;
}
echo '实际支付: ' . $b . '<br>'; //输出为7500;
// 模板语法
$a = 12000;
if ($a > 5000 && $a <= 10000) :
$b = $a * 0.6;
elseif ($a > 10000 && $a <= 20000) :
$b = $a * 0.5;
elseif (($a >= 20000)) :
$b = $a * 0.2;
else :
$b = $a;
endif;
echo '实际支付: ' . $b . '<br>'; //输出为6000;
echo '<hr>';
// 4. switch: 简化多分支
$a = 12000;
switch (true) {
case $a > 5000 && $a <= 10000;
$b = $a * 0.8;
break;
case $a > 10000 && $a <= 20000;
$b = $a * 0.5;
break;
case $a >= 20000;
$b = $a * 0.2;
break;
default;
$b = $a;
}
echo '实际支付: ' . $b . '<br>'; //输出为6000;
// 模板语法
switch (true):
case $a > 5000 && $a <= 10000;
$b = $a * 0.8;
break;
case $a > 10000 && $a <= 20000;
$b = $a * 0.5;
break;
case $a >= 20000;
$b = $a * 0.2;
break;
default;
$b = $a;
endswitch;
echo '实际支付: ' . $b . '<br>'; //输出为6000;
// switch 更常用的场景是单值判断
$a = 0.5;
$b = 5000;
switch ($a):
case 0.8;
$b *= 0.8;
break;
case 0.5;
$b *= 0.5;
break;
case 0.2;
$b *= 0.2;
break;
default;
die('不支持');
endswitch;
echo '实际支付: ' . $b . ', 折扣率: ' . $a;//输出为实际支付: 2500, 折扣率: 0.5
<?php
# 循环
$a = ['1', '2', '3', '4', '5'];
// 1. 入口判断型
echo current($a); //输出为 1 ;
next($a); //指针下移
echo current($a); //输出为 2 ;
next($a); //指针下移
echo current($a); //输出为 3 ;
echo '<hr>';
reset($a); //重置指针
// $b = current($a)循环条件
while ($b = current($a)) {
echo $b;
//更新循环条件, 没有这个语句, 会一直输出1 进入死循环
next($a);
}
reset($a); //重置指针
while ($b = current($a)) :
echo $b;
//更新循环条件, 没有这个语句, 会进入死循环
next($a);
endwhile;
echo '<hr>';
// 2. 出口判断型
reset($a); //重置指针
do {
$b = current($a); //没有这个语句,会自动执行一次,
echo $b;
//更新循环条件, 没有这个语句, 会一直输出1 进入死循环
next($a);
} while ($b = current($a));
// 无论条件是否为真,至少会执行一次
// 没有对应的模板语法
// 3. 计数型
echo '数组中有: ' . count($a); //输出为 5组数据
echo '<hr>';
// $i = 0;循环变量初始化
// $i < count($cities): 循环条件
// $i++: 更新循环条件
for ($i = 0; $i < count($a); $i++) {
echo $a[$i] . '<br>';
}
// 模板语法
for ($i = 0; $i < count($a); $i++) :
echo $a[$i] . '<br>';
endfor;
echo '<hr>';
reset($a); //重置指针
// continue: 终止当前循环,提前进入下一轮
$a = ['1', '2', '3', false, '4', null, '5'];
while ($b = current($a)) {
echo $b . '<br>';
next($a);
} //输出为 123
echo '<hr>';
for ($i = 0; $i <= count($a); $i++) {
// 跳过空数据
if (!$a[$i]) continue;
echo $a[$i] . '<br>';
if ($a[$i] === '4')
// break; 跳出本层
break;
}
总结
<?php
for ($i = 1; $i <= 9; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "{$i}*{$j}=" . ($i * $j) . " ";
}
echo "<br/>";
}
$j = 1;
while ($j <= 9) {
$i = 1;
while ($i <= $j) {
echo "{$i}*{$j}=" . ($i * $j) . " ";
$i++;
}
echo "<br/>";
$j++;
}