运算符
<?php
// 注意写的时候符号不能在中文时输入符号会报错
// 取模:取余数
echo 10 % 3;
echo '<hr>';
// 自加
$i = 1 ;
echo $i,'<br>';
// 在++放后面那一部还是原来的值
// 在下一次调用才是自加过后的值
echo $i++,'<br>';
echo $i,'<br>';
// ++放前面那一部结果直接就是加一后的值
// --同理
echo ++$i,'<br>';
echo $i++,'<br>';
echo $i,'<br>';
echo '<hr>';
// --
$q=10;
echo $q,'<br>';
echo $q--,'<br>';
echo $q,'<br>';
echo --$q,'<br>';
echo $q,'<br>';
echo '<hr>';
// 幂运算**: 幂运算需要 `php5.6+`版本
$w=2; $e=5;
echo $w * $e;
echo '<hr>';
// .是将左右两边的内容不管是不是字符串都会强制转换成字符串
// ,不会这样做会让内容以原本的数据返回
echo '大家好'.'我是xxx';
echo '大家好','我是xxx';
echo '<hr>';
// 赋值运算符
$i=2;
$i=$i+1;
echo $i ,'<br>';
// 简写
// $i +=1;
echo $i ,'<br>';
// 其他同理
echo '<hr>';
// 将内容添加到$i的后面
$i .=20;
echo $i ,'<br>';
echo '<hr>';
// ==表示值相等。也不要求类是否相等
// ===表示全等。要求值和类型一样
if(2=='5') echo '相等';else echo '不相等';
echo '<br>';
if(5=='5') echo '相等';else echo '不相等';
echo '<br>';
// ===表示全等。要求值和类型一样
if(5==='5') echo '相等';else echo '不相等';
echo '<br>';
if('5'==='5') echo '相等';else echo '不相等';
echo '<hr>';
// 不相等!=
$i=2;
echo $i != 2 ?'不相等':'相等','<br>';
// 不全等!==
echo $i !== '2' ?'不全等':'全等';
echo '<hr>';
// 太空船比较符<=> :需要7.0及以上版本支持
// `<=>`: 也叫组合比较符, 例如`c`, 有三种返回结果
$i = 11;$p = 12;
echo $i <=> $p ,'<br>';
var_dump(10 <=> 20);
$i = 11;$p = 12;
// 运用循环在不同情况下输出a、b、c。
if(($i<=>$p)>0):
echo 'a';
elseif(($i<=>$p)<0):
echo 'b';
else:
echo 'c';
endif;
echo '<hr>';
// 逻辑运算符
// 1、&&:与的意思可以理解为乘法算式
// true=1 false=0
$i=2;$p=2;$w=4;
// flase * flase = flase
// 最终输出是假,及下面设定的不满足
// $i>$p && $i>$w
// ? '正确' :'错误'
echo $i>$p && $i>$w ?'满足':'不满足','<br>';
$i=5;$p=2;$w=4;
// true * true = true
echo $i>$p && $i>$w ?'满足':'不满足','<br>';
var_dump($i>$p && $i>$w);
echo '<br>';
// 在var_dump($i>$p && $i>$w)后面加无用
var_dump($i>$p && $i>$w) ?'满足':'不满足';
echo '<hr>';
// 2、|| :或的意思。可以理解为加法
// true=1 false=0
// 这里不可以用单独一个=
// 单独一个等号表示给变量赋值
// 是否相等用== 是否全等用===
$i=1;$p=2;$w=4;
echo $i<$p || $i>$w ?'最少有一个满足':'两个都不满足','<br>';
echo $i>$p||$i==$w ?'最少有一个满足':'两个都不满足';
echo '<hr>';
// 3、!非的意思 :意思是取反 得到的是true取成false
// 得到false取成true
$q=false;
if($q) echo '取反成功';else echo '取反失败','<br>';
if(!$q) echo '取反成功';else echo '取反失败';
echo '<hr>';
// 三元运算符
// 1、 ? :简化双分支if 仅判断表达式
// 简单来说 ? 后面跟满足条件后要输出的内容
// :后面跟不满足条件后要输出的内容
echo 1>2 ? '正确':'错误','<br>';
echo 1<2 ? '正确':'错误';
echo '<hr>';
// 2、 ?? 合并运算符,设置默认值。 判断变量存在且不为null
// 首先判定变量是否存在然后判定是不是null。不存在或为null就输出 : 后面的内容
// 存在且值不是null就输出
$t='name';
$t = isset($t) ? $t :'root';
echo $t,'<br>';
// 用 ?? 简化代码达到相同的效果
// $t=null;
$t=111;
$t = $t ??'dwa';
echo $t;
echo '<hr>';
// @ 错误屏蔽符:屏蔽所有运行错误
echo $y ?'错误屏蔽成功':'错误屏蔽失败';
echo '<hr>';
// $y=1;
// 这个好像判定不是按是否屏蔽成功 而是按照$y是true还是false
// $y未定义所以是false
echo @$y ?'错误屏蔽失败':'错误屏蔽成功';
echo '<hr>';
(10/0);
@(10/0);
流程结构
1.分支结构
<?php
echo '<h1>'.'流程控制'.'</h1>';
echo '<h2>'.'1、分支结构'.'</h2>';
// 分支结构
// 1、单分支 if(){...}
// 进货 售价
$i=100;$p=200;
if($i<$p){
$p=$p*0.9;
echo $p,'<br>';
}
echo $p;
echo '<hr>';
// 单分支模板语法
// 如果代码体只有一行,可以省略大括号
// 进货 售价
$i=100;$p=200;
if($i<$p) $p=$p*0.9; echo $p,'<br>';
// 有一种替代语法 : 模板语法, 用在与html代码混编的时候
// 模板语法的目标是: 干掉大括号
$i=100;$p=200;
if($i<$p):
$p=$p*0.9;
echo $p,'<br>';
endif;
echo '<hr>';
// 双分支 if(){...}
// 进货 售价
$i=100;$p=200;
if($p-$i>=100){
$p=$p*0.9;
echo '打折购买'.$p,'<br>';
}else{
echo '售价购买'.$p;
}
$i=100;$p=150;
if($p-$i>=100){
$p=$p*0.9;
echo $p,'<br>';
}else{
echo '售价购买'.$p;
}
echo '<hr>';
// 双分支模板语法
// 注意如果代码体只有一行,可以省略大括号。指的是没有else这样的转折
// 但是如果代码是多行的或不能单纯省略大括号那样会报错。要按模板语法写
$i=100;$p=200;
if($p-$i>=100):
$p=$p*0.9;
echo '打折购买'.$p,'<br>';
else:
echo '售价购买'.$p;
endif;
$i=100;$p=150;
if($p-$i>=100):
$p=$p*0.9;
echo $p,'<br>';
else:
echo '售价购买'.$p;
endif;
echo '<hr>';
// 多行分支 if(){...}elseif(){...}elseif(){...}···else{...}
// 当然最后一个else要不要都可以用elseif也是一样的效果但是最好是用else这样方便阅读和保持过完整
// 同事假设要所有大于进价的折扣都设置完了,要是低于进价大话直接用else就包括了。用elseif还要写范围麻烦
// 所以要以els结尾
$i=1000;$p=11211;
if($p>$i && $p-$i>100 && $p<2000){
$p=$p*0.9;
echo '九折购买'.$p,'<br>';
}elseif( $p>=2000 && $p<20000){
$p *=0.7;
echo '七折购买'.$p,'<br>';
}elseif($p >= 20000){
$p *= 0.5;
echo '五折购买'.$p,'<br>';
}else{
echo '原价购买'.$p,'<br>';
}
echo '<hr>';
// 模板语法
$i=1000;$p=11211;
if($p>$i && $p-$i>100 && $p<2000):
$p=$p*0.9;
echo '九折购买'.$p,'<br>';
elseif( $p>=2000 && $p<20000):
$p *=0.7;
echo '七折购买'.$p,'<br>';
elseif($p >= 20000):
$p *= 0.5;
echo '五折购买'.$p,'<br>';
else:
echo '原价购买'.$p,'<br>';
endif;
echo '<hr>';
// 4. switch: 简化多分支c swith(){case():...break;····}
$i=100;$p=1;
// switch(true){
// case $p>=100 && $p<1000:
// $p *= 0.9;echo $p,'<br>';
// // 跳出本层循环进入下一层
// break;
// case $p>=1000 :
// $p *= 0.8;echo $p,'<br>';
// // 跳出本层循环进入下一层
// break;
// default:
// echo '不支持的折扣率11','<br>';
// // die()只有第一个可以输出
// die('不支持的折扣率');
// die('不支持的折扣率2');
// }
echo '<hr>';
// 模板语法
$i=100;$p=200;
switch(true):
case $p>=100 && $p<1000:
$p *= 0.9;echo $p,'<br>';
// 跳出本层循环进入下一层
break;
case $p>=1000 :
$p *= 0.8;echo $p,'<br>';
// 跳出本层循环进入下一层
break;
default:
echo '不支持的折扣率11','<br>';
// die()只有第一个可以输出
die('不支持的折扣率');
die('不支持的折扣率2');
endswitch;
echo '<hr>';
// switch 更常用的场景是单值判断
$i=1000;$p=10000;
if($p>$i && $p-$i>100 && $p<2000):
$w=0.9;
echo '九折购买','<br>';
elseif( $p>=2000 && $p<20000):
$w=0.7;
echo '七折购买','<br>';
elseif($p >= 20000):
$w= 0.5;
echo '五折购买','<br>';
else:
echo '原价购买','<br>';
endif;
switch($w):
case 0.8:
$p*=0.8;
break;
case 0.9:
$p*=0.9;
break;
case 0.6:
$p*=0.6;
break;
case 0.7:
$p*=0.7;
break;
default:
die('不打折');
endswitch;
echo $p;
2.循环结构
<?php
echo '<h1>'.'流程控制'.'</h1>';
echo '<h2>'.'2、循环结构'.'</h2>';
// 循环结构
// 1、入口判断型 while(循环条件){...}
$a = ['a','b','c','d'];
// 获取数组当前值 current()
// 获取数组的下一个内容 next()
// 重置数组reset()
current($a);
echo current($a),'<br>';
echo next($a),'<br>';
echo current($a),'<br>';
reset($a);
echo current($a),'<br>';
// $i = current($a)这个是循环条件
// while($i = current($a)){
// echo $i,'<br>';
// // 更新循环条件,没有这个语句会陷入死循环
// next($a);
// }
echo '<hr>';
// 模板语法
while($i = current($a)):
echo $i,'<br>';
// 更新循环条件,没有这个语句会陷入死循环
next($a);
endwhile;
echo '<hr>';
// 出口判断型
// 重置数组
reset($a);
do{
$i=current($a);
echo $i,'<br>';
next($a);
}while($i=current($a));
echo '<hr>';
// 无论条件是否为真,至少会执行一次
// 没有对应的模板语法
// 计数型 for(){...}
echo count($a),'<br>';
$i=$a;
for($w=0;$w < count($a);$w++){
// 可以直接用数组即将$i换成数组$a
echo $i[$w],'<br>';
}
// continue终止本次循环提前进入下一轮循环
$b=['你好','我好','大家好','全都好'];
while($i=current($b)):
echo $i,'<br>';
next($b);
endwhile;
for($q=0;$q<count($b);$q++):
echo $b[$q],'<br>';
endfor;
echo '<hr>';
$c=['你好','我好','大家好',false,'全都好'];
// 注意再次强调
// 单分支简化写法就是直接去掉大括号就行了 if() ... ;
// 单行分支的模板写法 if():....endif;
for($q=0;$q<count($c);$q++):
if(!$c[$q]): continue;
endif;
echo $c[$q],'<br>';
endfor;
echo '<hr>';
reset($c);
for($q=0;$q<count($c);$q++):
if(!$c[$q]) continue;
echo $c[$q],'<br>';
endfor;
reset($c);
while($i=current($c)):
echo $i,'<br>';
next($c);
endwhile;
// while对数值依赖性太强了
echo '<hr>';
reset($c);
for($q=0;$q<count($c);$q++):
if(!$c[$q]) continue;
echo $c[$q],'<br>';
// 我能力有限只能做到你好我好
// break当是双层循环是脱离当前层,当只有一次时直接结束
if($c[$q]==='我好') break;
endfor;