重温手册(三):运算符
算术运算符
整型与浮点型的运算:
$sum = 1 + 2.0; var_dump($sum); //float(3)
$dif = 5.0 - 1; var_dump($dif); //float(4)
$pro = 4.0 * 3; var_dump($pro); //float(12)
$dis = 9 / 3.0; var_dump($dis); //float(3)
$pow = 5 ** 3.0; var_dump($pow); //float(125)
$mod = 9.0 % 2; var_dump($mod); //int(1)
//运算过程中有浮点数的参与,除了取模,其他运算的结果都是浮点型
取模:
$mod1 = 9 % -2;
$mod2 = -9 % -2;
var_dump($mod1); //int(1)
var_dump($mod2); //int(-1)
//取模的结果和被除数的正负符号一样
赋值运算符
$var = '赋一个值';
$a += $b; //配合算术运算符使用
$a &= $b; //配合位运算符使用
$a .= $b; //配合字符串拼接符使用
$a ??= $b; //配合NULL合并运算符使用
位运算符
$a = 0b1011; //11
$b = 0b0010; //2
echo decbin($a & $b); //10(可看作0010) 位与:11得1,其他为0
echo decbin($a | $b); //1011 位或:00得0,其他为1
echo decbin($a ^ $b); //1001 位异或:10得1,其他为0
echo decbin(~$a); //1111111111111111111111111111111111111111111111111111111111110100(64位) 位取反:1得0,0得1
echo decbin($a << $b); //101100 位左移:将$a(二进制)左移动$b(十进制)个位置,用0补上
echo decbin($a >> $b); //10 位右移:将$a(二进制)右移动$b(十进制)个位置,即抹去移动的位数
比较运算符
一般比较:
$a = 1;
$b = 2;
var_dump($a > $b); //bool(false)
var_dump($a < $b); //bool(true)
$c = 3;
$d = '3';
var_dump($c == $d); //bool(true)
var_dump($c === $d); //bool(false) 全等,类型也要相同
特殊比较:
var_dump(1 == true); //bool(true)
var_dump(0 == false); //bool(true)
var_dump(false < true); //bool(true)
var_dump(NULL < false); //bool(false)
var_dump(NULL == false); //bool(true)
var_dump(NULL > false); //bool(false)
var_dump(NULL < true); //bool(true)
var_dump(NULL == true); //bool(false)
var_dump(NULL > true); //bool(false)
var_dump(NULL < 0); //bool(false)
var_dump(NULL == 0); //bool(true)
var_dump(NULL > 0); //bool(false)
//先转化为相同类型再进行比较,可以把true看成1,NULL和false看成0
三元运算符
$a = 110;
$b = empty($a) ? 120 : $a;
echo $b; //110
$temp1 = true ? 'true' : 'false';
$temp2 = false ? 'true' : 'false';
echo $temp1; //true
echo $temp2; //false
NULL合并运算符
$a = 110;
$b = $a ?? 120;
echo $b; //110
$temp1 = NULL ?? 'abc';
$temp2 = '' ?? 'abc';
echo $temp1; //abc
var_dump($temp2); //string(0) "" 只有为NULL才会选择第二个表达式
递增/递减运算符
一般情况:
$a = 2;
echo ++$a; //3 先递增后执行
$a = 2;
echo $a++; //2 先执行后递增
echo $a; //3
$a = 2;
echo --$a; //1 先递减后执行
$a = 2;
echo $a--; //2 先执行后递减
echo $a; //1
特殊情况;
$a = true;
var_dump(++$a); //bool(true)
$a = true;
$a++;
var_dump($a); //bool(true)
$a = true;
var_dump(--$a); //bool(true)
$a = true;
$a--;
var_dump($a); //bool(true)
$b = false;
var_dump(++$b); //bool(false)
$b = false;
$b++;
var_dump($b); //bool(false)
$b = false;
var_dump(--$b); //bool(false)
$b = false;
$b--;
var_dump($b--); //bool(false)
$c = NULL;
var_dump(++$c); //int(1)
$c = NULL;
$c++;
var_dump($c); //int(1)
$c = NULL;
var_dump(--$c); //NULL
$c = NULL;
$c--;
var_dump($c); //NULL
逻辑运算符
//逻辑与
var_dump(true && true); //bool(true) 双方为true才为true
var_dump(true && false); //bool(false)
var_dump(false && true); //bool(false)
var_dump(false && false); //bool(false)
//逻辑或
var_dump(true || true); //bool(true)
var_dump(true || false); //bool(true)
var_dump(false || true); //bool(true)
var_dump(false || false); //bool(false) 双方为false才为false
//逻辑异或
var_dump(true xor true); //bool(false)
var_dump(true xor false); //bool(true) 双方分别为true和false才为true
var_dump(false xor true); //bool(true)
var_dump(false xor false); //bool(false)
//逻辑非
var_dump(!true); //bool(false)
var_dump(!false); //bool(true)
字符串运算符
$a = 'hello';
$b = 'world';
echo $a.$b; //helloworld
数组运算符
联合符+:
$a = array(
'a' => 'apple',
'b' => 'banana',
'c' => 'cat'
);
$b = array(
'd' => 'dog',
'b' => 'banana2',
'c' => 'cat2'
);
$res1 = $a + $b;
print_r($res1); //Array ( [a] => apple [b] => banana [c] => cat [d] => dog )
$res2 = $b + $a;
print_r($res2); //Array ( [d] => dog [b] => banana2 [c] => cat2 [a] => apple )
//如果key相同,那么+号左边数组的值覆盖+号右边数组的值
比较符==、===:
$a = array(
'a' => '1', 'b' => 2
);
$b = array(
'a' => '1', 'b' => '2'
);
$c = array(
'b' => 2, 'a' => '1'
);
$d = array(
'a' => '1', 'b' => 2
);
var_dump($a == $b); //bool(true)
var_dump($a == $c); //bool(true)
var_dump($a == $d); //bool(true)
var_dump($a === $b); //bool(false)
var_dump($a === $c); //bool(false)
var_dump($a === $d); //bool(true) //全等的条件是键名键值顺序类型一样
运算符优先级
大概顺序:求幂 > 递增递减 > 逻辑非 > 算术 > 比较 > 位 > 逻辑 > 赋值
具体可参考手册:www.php.net/manual/zh/language.ope...
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: