PHP运算符详解

什么是表达式

表达式是 PHP 最重要的基石,在 PHP 中,几乎所写的任何东西都是一个表达式。简单但却最精确的定义一个表达式的方式就是“任何有值的东西”。

PHP运算符

按照功能划分

算数运算符

x + y 加
x - y 减
x * y 乘
x / y 除
x % y 模(除法的余数)
- x 取反,x 取反 -2
x . y 并置,连接两个字符串	"Hi" . "Ha"得到HiHa

实例

<?php
$a = 3;
$b = 5;
echo $a+$b; //8
echo $a-$b; //-2
echo $a*$b; //15
echo $a/$b; //0.6
echo $a%$b; //3
echo $a%-$b; //3
echo -$a%$b; //-3
echo -$a%-$b; //-3

递增递减运算符

++ x	预递增,x 加 1,然后返回 x
x ++	后递增,返回 x,然后 x 加 1
-- x	预递减,x 减 1,然后返回 x
x --	后递减,返回 x,然后 x 减 1

实例

<?php
$i = 1;
echo ++$i;//2

$i = 5;
echo $i++; //5
echo $i; //6

$j = 3;
echo $j--; //3
echo $j; //2

$j = 3;
echo --$j; //2

//浮点数支持递增递减运算符
$var = 1.2;
echo ++$var; //
echo "<br/>";

$var = 2.3;
echo --$var; //1.3

$var = 4.5;
echo $var++; //4.5
echo $var; //5.5

$var = 6.7;
echo $var--; //6.7
echo $var; //5.7

//布尔类型不支持递增递减运算符
$var = true;
echo ++$var; //1

$var = true;
echo --$var; //1

//null只支持递增运算符不支持递减运算符
$var = null;
echo ++$var; //1

$var = null;
echo --$var; //

//字符串只支持递增运算符不支持递减运算符
$str = "a";
echo ++$str; //b

$str = "m";
echo --$str; //m

$str = "z";
echo ++$str; //aa

$str = "a1";
echo ++$str; //a2

$str = "a9";
echo ++$str; //b0

字符连接符

英文的 . 和 ,  来连接字符串

echo "a"."b"."c"; //abc

$str1 = "Hello";
$str2 = "World";
echo $str1,"&nbsp;",$str2; //Hello World

$newStr = $str1,$str2;
echo $newStr; //提示语法错误因为 “,” 是echo语句特有的

$newStr = $str1."&nbsp;".$str2;
echo $newStr; //Hello World

赋值运算符

在 PHP 中,基本的赋值运算符是 “=”。它意味着左操作数被设置为右侧表达式的值。也就是说,”$x = 5” 的值是 5

x = y	x = y  左操作数被设置为右侧表达式的值
x += y	x = x + y  加
x -= y	x = x - y  减
x *= y	x = x * y  乘
x /= y	x = x / y  除
x %= y	x = x % y  模(除法的余数)
a .= b	a = a . b  连接两个字符串

实例

<?php
$i = "3";
$i+=5;
echo $i; //8

$k = "5";
$k -= 7;
echo $k; //-2

$m = "9";
$m *= 2;
echo $m; //18

$q = "8";
$q /= 4;
echo $q; //2

$n = "6";
$n %= 2;
echo $n; //0

$str = "hello";
$str .= "world";
echo $str; //helloworld

比较运算符

x == y	等于	 如果 x 等于 y,则返回true,5==8,返回false
x === y	绝对等于  如果 x 等于 y,且它们类型相同,则返回true,5==="5" 返回false
x != y	不等于	 如果 x 不等于 y,则返回true,5!=8 返回true
x <> y	不等于	 如果 x 不等于 y,则返回true,5<>8 返回true
x !== y	绝对不等于  如果 x 不等于 y,或它们类型不相同,则返回true,5!=="5" 返回true
x > y	大于	如果 x 大于 y,则返回,true,5>8 返回false
x < y	小于	如果 x 小于 y,则返回true,5<8 返回true
x >= y	大于等于	如果 x 大于或者等于 y,则返回true,5>=8 返回false
x <= y	小于等于	如果 x 小于或者等于 y,则返回true,5<=8 返回true

实例

<?php
var_dump(
    3>1, //bool(true)
    2<4, //bool(true)
    3>=1, //bool(true)
    2<=4 //bool(true)
    );

//测试==和===的区别
var_dump(
    1==true, //bool(true)
    1=="1", //bool(true)
    0==false, //bool(true)
    0==null, //bool(true)
    1!=="1", //bool(true)
    1!==1, //bool(false) 
    1!="1", //bool(false) 
    1<>1 //bool(false) 
);

var_dump(
    1===true, //bool(false) 
    1==="1", //bool(false) 
    0===false, //bool(false) 
    0===null //bool(false) 
);

逻辑运算符

x and y	与  如果 x 和 y 都为 true,则返回 true
x or y	或  如果 x 和 y 至少有一个为 true,则返回 true
x xor y	异或  如果 x 和 y 有且仅有一个为 true,则返回 true
x && y	与  如果 x 和 y 都为 true,则返回 true
x || y	或  如果 x 和 y 至少有一个为 true,则返回 true
! x  非  如果 x 不为 true,则返回 true

实例

<?php
//测试逻辑运算符
//逻辑与
var_dump(
    true && true, //bool(true)
    true && false, //bool(false) 
    false && true, //bool(false) 
    false && false //bool(false) 
);

//逻辑或
var_dump(
    true || true, //bool(true)
    true || false, //bool(true)
    false || true, //bool(true)
    false || false //bool(false)
);

//逻辑非
var_dump(
    !true, //bool(false)
    !false //bool(true)
);

//逻辑异或
var_dump(
    true xor true, //bool(false)
    true xor false, //bool(true)
    false xor true, //bool(true)
    false xor false //bool(false)
);

//逻辑与短路
$i = 0;
$j = 1;
if ($i && $j) {//0>-false && 1>-true
    echo "aa";
}else{
    echo "bb";
}
//bb

$i = 0;
$j = 1;
if ($i && --$j){//0>-false && 0>-false
    echo "aa";
}else{
    echo "bb";
}
//bb

$i = 0;
$j = 0;
if (++$i && $j++){//1>-true && 0>-false
    echo "aa";
}else{
    echo "bb";
}
//bb

//逻辑或短路
$i = 0;
$j = 1;
if (++$i || --$j){
    echo "aa";
}else{
    echo "bb";
}
//aa

错误抑制符

抑制错误输出,同过@符号加到会产生错误的表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

<?php
$var = 123;
@settype($var,"xuxiaoke");

按照运算符数目

三元运算符

(expr1) ? (expr2) : (expr3)
如果exp1为真,执行?之后的exp2,否则执行:之后的exp3

实例

<?php
$int = 2;
$result = $int == 2 ? "我" : "你";
echo $result;

运算符优先级

// 优先级: && > = > and 
// 优先级: || > = > or