重温手册(三):运算符

算术运算符

整型与浮点型的运算:

$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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!