任何有值的,都可以看成表达式。
## 运算符
### 算术运算符
`+-*/%`
取模常用来换行
~~~
if($i+1)/2==0{
echo "<br/>";
}
~~~
递增递减
~~~
++$a;
$a++;
--$a;
$a--;
~~~
### 字符串运算
* 字符串是对ascii码递增,只支持a-z,A-Z之间循环
* 没有字符串递减
* 字符串和数字相加,尝试把字符串转成数字,如果不能转数字变为0
* 字符串和数字可以进行所有的算术运算,转换规则相同
* 字符串数字混合,从第一个数字从前往后取,转不了就舍弃`123f=>123`,`f123=>0`
~~~
$str='a';
//找出a的ascii码,加1,然后返回对应的字符
$str++; //b
abc---abd
abz---aca
~~~
~~~
'a'+3=3;
'2'+3=5
‘123f’+3=123+3=126
~~~
### 赋值运算
~~~
//最常见的6种,其他的不研究
=
+=
-+
*=
/=
%=
~~~
### 比较运算符
~~~
==
===
!=
!==
>
<
>=
<=
~~~
~~~
$a=8.4;
$b=2.3;
$min_val=0.000000001;
if(round($a*100000)-round($b*100000)>$min_val){
echo '$a'=='$b';
}else if($a>$b){
echo '$a'>'$b';
}else{
echo '$a'<'$b';
}
~~~
### 逻辑运算符
运算优先级:&&优先级>and, ||优先级>or, =优先级>or,`&&` 大于 `=` 大于` and`
`$a=true|| false //先运算$a=true` 使用括号括起
~~~
$a and $b;
$a or $b;
$a xor $b;//有且只有一个为真
!$a;
$a && $b;都为真
$a || $b;只要有一个为真
~~~
**细节**
* 逻辑与短路现象
~~~
//如果第一个为假,第二个不执行运算
$a=0;$b=3;
if($a && $b++){
echo "abcd";
}
var_dump($a,$b);//0,3
~~~
* 逻辑或短路
~~~
//第一个为true,第二个不再执行
$a=1;
$b=3;
if($a || $b++){
echo "abcd";
}
var_dump($a,$b); //1,3
~~~
~~~
//$a先比较为false,后运算++
$a=10;$b=3;
if($a++>10 && $b++){
echo "abcd";
}
var_dump($a,$b); //11,3
~~~
三元运算符
~~~
$res=($a==1)?100:'HELLO';
~~~
### 字符串运算符 .
* 拼接功能
* .=运算中间不能有空格
~~~
$a.$b
~~~
运算:
~~~
'abc'.1234 //abc1234----字符串运算
'abc'+1234 //1234 ----算术运算
~~~
### 类型运算符 instanceof
变量是否属于某个类型
~~~
class Dog{}
$dog1=Dog();
if($dog1 instanceof Dog){
//判断这个实例是不是Dog对象的
}
~~~
### 执行运算符``
* 跨平台性差,不同平台指令不同
* 等同于函数shell_exec()
* 将反引号里面的内容作为外壳来执行,经常用来运行系统指令
~~~
echo '<meta charset=gbk>';
echo '<pre>';
echo `ipconfig -all`;
echo `netstat -anb`;
~~~
### 错误控制运算符@
* 将@放在表达式之前,可以忽略这个表达式的错误。
* 致命错误显示error
* 一般可以和die配合使用,一般错误忽略,致命错误显示die的内容,并终止
~~~
$con=@mysql_connect('localhost','root','root') or die(mysql_error());
if($con){
echo '连接成功';
} else{
echo "连接失败";
}
~~~
### 运算符优先级
![](https://box.kancloud.cn/17f351172baca587eb52dc6a23faa0e2_796x479.png)