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