文章目录
什么是表达式?
只要有值得东西都可以叫做表达式
PHP中的运算符
按照功能划分
1.算术运算符
+ - * / % **(幂运算)
<?php
//算术运算符的例子
$a = 3;
$b = 8;
echo $a+$b,'<br/>';
echo $a-$b,'<br/>';
echo $a*$b,'<br/>';
echo $a/$b,'<br/>';
echo 3%8,'<br/>';//3
echo 3%-8,'<br/>';//3
echo -3%8,'<br/>';//-3
echo -3%-8,'<br/>';//-3
echo 2 ** 3,'<br/>';
echo 3 ** 3;
2.递增递减运算符
1.++ --
2.前缀形式
$var=1, ++$var,--$var
先加减1,接着再执行
3.后缀形式
$var=1;$var++;$var--;
先执行,接着在加减1
4.注意
数值型支持递增递减运算符
布尔型不支持递增递减运算符
NULL只支持递增不支持递减
字符串只支持递增,不支持递减
1.++ -- 2.前缀形式 $var=1, ++$var,--$var 先加减1,接着再执行 3.后缀形式 $var=1;$var++;$var--; 先执行,接着在加减1 4.注意 数值型支持递增递减运算符 布尔型不支持递增递减运算符 NULL只支持递增不支持递减 字符串只支持递增,不支持递减
dizengdijian.php
<?php //递增递减运算符 //整数支持递增递减运算符 $i = 1; echo ++$i,'<br/>';//2 $i = 5; echo $i++,'<br/>';//5 echo $i,'<br/>';//6 $j = 3; echo $j--,'<br/>';//3 echo $j,'<br/>';//2 $j = 5; $j--; echo $j,'<br/>';//4 echo '<hr/>'; //浮点类型支持递增递减运算符 $var = 1.2; echo ++$var,'<br/>';//2.2 $var = 1.3; echo --$var,'<br/>';//0.3 echo '<hr/>'; //布尔类型不支持递增递减运算符 $var=true; echo $var,'<br/>';//1 echo ++$var,'<br/>';//1 echo --$var,'<br/>';//1 echo '<hr/>'; //测试null只支持递增运算符,不支持递减运算符 $var = null; echo $var,'<br/>';//空 echo ++$var,'<br/>';//1 echo --$var,'<hr/>';//0 //测试字符串只支持递增运算符,不支持递减运算符 $str = 'a'; echo ++$str,'<br/>';//b $str = 'c'; echo ++$str,'<br/>';//d $str = 'm'; echo --$str,'<br/>';//m $str = 'z'; echo ++$str,'<br/>';//aa $str = 'a1'; echo ++$str,'<br/>';//a2 $str = 'a9'; echo ++$str,'<br/>';//b0 $str = 'B'; echo ++$str,'<br/>';//C
ord.php
<?php //ord($ascii)得到指定字符的ASCII码值 $str = 'a'; echo ord($str),'<br/>';//97 echo ord(++$str),'<br/>';//98 //chr($ascii)根据指定字符得到对应的ASCII码值 echo chr(98),'<br/>';//b echo chr(107),'<br/>';//k
3.字符连接符
英文的.来连接字符串
<?php
//字符连接符的例子
echo 'a'.'b'.'c'.'<br/>';
$str1 = 'hello';
$str2 = 'world';
$newStr = $str1.'~'.$str2.'!';
echo $newStr;//hello world
4.赋值运算符
1.=
2.+=
$a+=1;$a=$a+1;
3.-=
$a-=2;$a=$a-2;
4.*=
$a*=3;$a=$a*3;
5./=
$a/=4;$a=$a/4;
6.%=
$a%=6;$a=$a%6;
7.=
$str.='king';$str=$str.'king';
1.= 2.+= $a+=1;$a=$a+1; 3.-= $a-=2;$a=$a-2; 4.*= $a*=3;$a=$a*3; 5./= $a/=4;$a=$a/4; 6.%= $a%=6;$a=$a%6; 7.= $str.='king';$str=$str.'king';
例子:
<?php $username = 'king'; $i = 3; $i +=5; echo $i,'<br/>';//8 $i = 2; $i -=5; echo $i,'<br/>';//-3 $i = 3; $i *=5; echo $i,'<br/>';//15 $i = 6; $i /=2; echo $i,'<br/>';//3 $i = 3; $i %=8; echo $i;//3 echo '<br/>'; echo '<hr/>'; $str1 = 'hello'; $str1 .='world'; $str1 .='!'; echo $str1;//hello world
test.php
<?php //mt_rand($min,$max)产生成一个随机数 echo mt_rand(1,9),'<br/>'; echo mt_rand(1000,9999),'<br/>'; echo '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1000,9999).'</span>'; echo '<hr/>'; echo '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; echo '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; echo '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; echo '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; echo '<hr/>'; $code = '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; $code .= '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; $code .= '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; $code .= '<span style="color:rgb('.mt_rand(0,255).','.mt_rand(0,255).','.mt_rand(0,255).')">'.mt_rand(1,9).'</span>'; echo $code;
5.比较运算符
比较运算符的结果是布尔类型
== 只比较值是否相同 === 既要比较值,又要比较类型
bijiao.php
<?php //比较运算符的例子 var_dump( 3>2, 2<4, 3>=1, 2<=4 ); //测试==和=== var_dump( 1==true, 1=='1', 0==false, 0==null, 1===true,//false 1==='1',//false 0===false,//false 1===1, 1!=='1', 1<>1,//false 1!=='1' ); //太空船运算符 var_dump( 3<=>1,//1 3<=>3,//0 3<=>5//-1 ); var_dump( 1.5<=>1.5,//0 1.5<=>1.2,//1 1.5<=>1.6 //-1 ); var_dump( 'a'<=>a,//0 'c'<=>b,//1 'c'<=>'e'//-1 ); //NULL检测符 var_dump( true??'king'??123,//true 0??false??null??'hello world',//0 $abc??'hello world'//hello world );
6.逻辑运算符
逻辑运算符的结果也是布尔类型
1.逻辑与 &&或者and代表逻辑与,是并且的意思,两个表达式都为true,结果才为true true && true=true true && false=false false && true=false false && false=false 注意: 如果第一个表达式为false,整个结果就为false,那第二个表达式就被短路(执行不到第二个表达式) 2.逻辑或 || 或者 or代表逻辑或,是或者的意思,两个表达式有一个为true,结果就为true true || true=true true || false=true false || true=true false || false=false 注意: 如果第一个表达式为true,整个结果就为true,那第二个表达式就被短路了 3.逻辑非 !代表逻辑非,是取反 !true=false !false=true 4.逻辑异或 xor代表逻辑异或,是两个表达式不同为true或者false结果为true true xor true=false true xor false=true false xor true=true false xor false=false
luoji.php
<?php //测试逻辑运算符 //逻辑与 var_dump( true&&true, true&&false, false&&true, false&&false ); //逻辑或 var_dump( true||true, true||false, false||true, false||false ); //逻辑非 var_dump( !true, !false ); //逻辑异或 var_dump( true xor true, true xor false, false xor true, false xor false ); echo '<hr/>'; //逻辑与,短路 $i = 0; $j = 1; if($i&&$j){//0->false,$j不执行 echo 'aa'; }else{ echo 'bb'; }//bb echo '<br/>'; $i = 0; $j = 1; if($i && --$j){//0->false,--$j不执行 echo 'cc'; }else{ echo 'dd'; }//dd echo '<br/>'; var_dump($i,$j);//int(0) int(1) $i = 0; $j = 0; if(++$i && $j++){//1->true,0->false echo 'ee'; }else{ echo 'ff'; }//ff echo '<br/>'; var_dump($i,$j);//int(1) int(1) echo '<hr/>'; //逻辑或短路 $i = 1; $j = 1; if($i-- || ++$j){//1->true,++$j不执行 echo '!!!'; }else{ echo '###'; }//!!! echo '<br/>'; var_dump($i,$j);//int(0) int(1) echo '<hr/>'; $i = 1; $j = 0; var_dump( !0, ++$abcdefg && --$alksdjk, --$i || --$j ); //true //false //true
7.错误抑制符
抑制错误输出,通过@符号加到会产生错误的表达式之前
按照运算符的数目
一元运算符 !
二元运算符 + -
三元运算符
exp1?exp2:exp3
如果exp1为true,执行?之后的exp2,否则执行:之后exp3
sanyuan.php
<?php //测试三元运算符 //三元运算符相当于缩写的if..else if(true){ echo 'aa'; }else{ echo 'bb'; } echo '<br/>'; echo true?'aa':'bb'; echo '<br/>'; $username = 'king'; if($username=='king'){ $res='hello king'; }else{ $res='hello everybody'; } echo $res; echo '<br/>'; $res=$username=='king'?'hello king':'hello everybody'; echo $res; echo '<hr/>'; //exp1?:exp3 $res=123?:'abc'; $res=0?:'this is a test'; var_dump($res); echo '<hr/>';
PHP运算符的优先级
想改变优先级可以通过() 有短路的情况优先考虑短路
youxianji.php
<?php //(1+2)*3-4/5 //优先级的例子 $i = 1; $j = 0; if($i-- || $j++){//$i-- ->1->true,$j++不执行 echo 'aa'; }else{ echo 'bb'; }//aa echo '<br/>'; var_dump($i,$j);//0 0 echo '<br/>'; $i = 1; $j = 0; if($p = $i-- || $j++){//$i-- ->1->true,$j++不执行 echo 'aa'; }else{ echo 'bb'; }//aa echo '<br/>'; var_dump($i,$j,$p);//0 0 true echo '<hr/>'; $i = 3; $j = 8; //拼装形式为3+8=11 echo "{$i}+{$j}=".$i+$j;//"3+8=3"+8=11 echo '<br/>'; echo "{$i}+{$j}=".($i+$j);//3+8=11
echo和var_dump
echo '<hr/>'; echo 1?true:false;echo '<br/>';//1 echo true?true:false;echo '<br/>';//1 var_dump(false?0:1);echo '<br/>';//int(1) var_dump(true?true:false);//bool(true)