文章目录
什么是表达式?
只要有值得东西都可以叫做表达式
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)
MySQL学习笔记