当前位置: 首页 > php>阅读正文

php运算符、运算符优先级

2021.9.7 朱丰华 1249 次 留下评论 3629字

PHP 中的运算符分为:算术运算符、递增/递减运算符、比较运算符、逻辑运算符、数组运算符、三元运算符等。

本章节我们将讨论 PHP 中不同运算符的应用。

在 PHP 中,赋值运算符 = 用于给变量赋值。

在 PHP 中,算术运算符 + 用于把值加在一起。

算术运算符

运算符名称描述实例结果
x + yx 和 y 的和2 + 24
x – yx 和 y 的差5 – 23
x * yx 和 y 的积5 * 210
x / yx 和 y 的商15 / 53
x % y模(除法的余数)x 除以 y 的余数5 % 2
10 % 8
10 % 2
1
2
0
– x取反x 取反– 2
a . b并置连接两个字符串“Hi” . “Ha”HiHa

以下实例演示了使用不同算术运算符得到的不同结果:

<?php
$x=10;
$y=6;
echo ($x + $y); // 输出16
echo ($x - $y); // 输出4
echo ($x * $y); // 输出60
echo ($x / $y); // 输出1.6666666666667
echo ($x % $y); // 输出4
?>

赋值运算符

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

运算符等同于描述
x = yx = y左操作数被设置为右侧表达式的值
x += yx = x + y
x -= yx = x – y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y模(除法的余数)
a .= ba = a . b连接两个字符串

以下实例演示了使用不同赋值运算符得到的不同结果:

<?php
$x=10;
echo $x; // 输出10

$y=20;
$y += 100;
echo $y; // 输出120

$z=50;
$z -= 25;
echo $z; // 输出25

$i=5;
$i *= 6;
echo $i; // 输出30

$j=10;
$j /= 5;
echo $j; // 输出2

$k=15;
$k %= 4;
echo $k; // 输出3
?>

以下实例演示了使用不同字符串运算符得到的相同结果:

<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出Hello world!

$x="Hello";
$x .= " world!";
echo $x; // 输出Hello world!
?>

递增/递减运算符

运算符名称描述
++ x预递增x 加 1,然后返回 x
x ++后递增返回 x,然后 x 加 1
— x预递减x 减 1,然后返回 x
x —后递减返回 x,然后 x 减 1

以下实例演示了使用递增/递减运算符得到的结果:

<?php
$x=10;
echo ++$x; // 输出11

$y=10;
echo $y++; // 输出10

$z=5;
echo --$z; // 输出4

$i=5;
echo $i--; // 输出5
?>

比较运算符

比较操作符可以让您比较两个值:

运算符名称描述实例
x == y等于如果 x 等于 y,则返回 true5==8 返回 false
x === y恒等于如果 x 等于 y,且它们类型相同,则返回 true5===”5″ 返回 false
x != y不等于如果 x 不等于 y,则返回 true5!=8 返回 true
x <> y不等于如果 x 不等于 y,则返回 true5<>8 返回 true
x !== y不恒等于如果 x 不等于 y,或它们类型不相同,则返回 true5!==”5″ 返回 true
x > y大于如果 x 大于 y,则返回 true5>8 返回 false
x < y小于如果 x 小于 y,则返回 true5<8 返回 true
x >= y大于等于如果 x 大于或者等于 y,则返回 true5>=8 返回 false
x <= y小于等于如果 x 小于或者等于 y,则返回 true5<=8 返回 true

以下实例演示了使用一些比较运算符得到的不同结果:

<?php
$x=100;
$y="100";

var_dump($x == $y);
echo "<br>";
var_dump($x === $y);
echo "<br>";
var_dump($x != $y);
echo "<br>";
var_dump($x !== $y);
echo "<br>";

$a=50;
$b=90;

var_dump($a > $b);
echo "<br>";
var_dump($a < $b);
?>

逻辑运算符

运算符名称描述实例
x and y如果 x 和 y 都为 true,则返回 truex=6
y=3
(x < 10 and y > 1) 返回 true
x or y如果 x 和 y 至少有一个为 true,则返回 truex=6
y=3
(x==6 or y==5) 返回 true
x xor y异或如果 x 和 y 有且仅有一个为 true,则返回 truex=6
y=3
(x==6 xor y==3) 返回 false
x && y如果 x 和 y 都为 true,则返回 truex=6
y=3
(x < 10 && y > 1) 返回 true
x || y如果 x 和 y 至少有一个为 true,则返回 truex=6
y=3
(x==5 || y==5) 返回 false
! x如果 x 不为 true,则返回 truex=6
y=3
!(x==y) 返回 true

数组运算符

运算符名称描述
x + y集合x 和 y 的集合
x == y相等如果 x 和 y 具有相同的键/值对,则返回 true
x === y恒等如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y不相等如果 x 不等于 y,则返回 true
x <> y不相等如果 x 不等于 y,则返回 true
x !== y不恒等如果 x 不等于 y,则返回 true

以下实例演示了使用一些数组运算符得到的不同结果:

<?php
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
$z = $x + $y; // $x 和 $y 数组合并
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>

三元运算符

另一个条件运算符是”?:”(或三元)运算符 。

语法格式:

(expr1) ? (expr2) : (expr3)

对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

以下实例中通过判断 $_GET 请求中含有 user 值,如果有返回 $_GET[‘user’],否则返回 nobody:

<?php
$test = 'w3cschool在线教程';
// 普通写法
$username = isset($test) ? $test : 'nobody'; echo $username, PHP_EOL;

// PHP 5.3+ 版本写法
$username = $test ?: 'nobody'; echo $username, PHP_EOL;
?>

运算符优先级

运算符优先级确定表达式中的术语分组。这会影响表达式的计算方式。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符。

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

结合方向运算符附加信息
clone newclone 和 new
从左到右[array()
从右到左++  —  ~ (int) (float) (string) (array) (object) (bool) @类型和递增/递减
instanceof类型
从右到左!逻辑运算符
从左到右*  /  %算术运算符
从左到右+ – .算术运算符和字符串运算符
从左到右<< >>位运算符
==  !=  ===  !==  <>比较运算符
从左到右&位运算符和引用
从左到右^位运算符
从左到右|位运算符
从左到右&&逻辑运算符
从左到右||逻辑运算符
从左到右? :三元运算符
从右到左=  +=  -=  *=  /=  .=  %=  &=  |=  ^= <<=  >>=  =>赋值运算符
从左到右and逻辑运算符
从左到右xor逻辑运算符
从左到右or逻辑运算符
从左到右,多处用到

运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。

<?php
// 优先级: &&  >  =  >  and
// 优先级: ||  >  =  >  or
 
$a = 3;
$b = false;
$c = $a or $b;
var_dump($c);          // 这里的 $c 为 int 值3,而不是 boolean 值 true
$d = $a || $b;
var_dump($d);          //这里的 $d 就是 boolean 值 true 
?>

以上实例输出结果为:

int(3)
bool(true)

括号的使用

我们通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

<?php
// 括号优先运算
 
$a = 1;
$b = 2;
$c = 3;
$d = $a + $b * $c;
echo $d;
echo "\n";
$e = ($a + $b) * $c;  // 使用括号
echo $e;
echo "\n";
?>

以上实例输出结果为:

7
9

错误抑止运算符

在php中, 错误默认会被打印出来, 当无法解决错误, 又不想被用户看见, 可使用该运算符

该运算符为 @ , 用法示例

if( @mysqli_connect('localhost', 'root', '123') ){
    ....
}

本篇完,还有疑问?留下评论吧

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注