php有哪些运算符?

PHP / 3788人浏览 / 0人评论

学习一门编程语言总需要知道的运算符有哪些?php运算符:算数运算符、赋值运算符、递增/递减运算符、比较运算符、逻辑运算符、数组运算符、三元运算符、组合比较符(php7+)、运算符优先级、括号的使用。

php 运算符

学习一门编程语言总需要知道的运算符有哪些?

php运算符:算数运算符、赋值运算符、递增/递减运算符、比较运算符、逻辑运算符、数组运算符、三元运算符、组合比较符(php7+)、运算符优先级、括号的使用。

1. php算数运算符

运算符号运算名称解释案例返回结果
a + b加法a与b相加2+35
a - b减法a与b相减5-23
a * b乘法a与b相乘5*210
x / y除法a与b相除5/22.5
5 % 2模(取除法的余数)a与b相除(取余数)5 % 2
10 % 8
10 % 2
1
2
0
- a取反a取反<?php $x =2 echo -$x ?>-2
a . b并置链接两个字符串"He"."llo"Hello

php程序逻辑中两个数的算数运算举例:

<?php
    $a = 5;
    $b = 12;
    echo ($a + $b); // 输出 17
    echo ($b - $a); // 输出 7
    echo ($a * $b); // 输出 60
    echo ($b / $a); // 输出 2.4
    echo ($b % $a); // 输出 2
    echo -$a; // 输出 -5
    echo $a.$b; // 输出 512
?>

2. php赋值运算符

运算符等同写法解释
a = ba = b左操作数被设置为右侧表达式的值
a += ba = a + b加操作
a -= ba = a - b减操作
a *= ba = a * b乘操作
a /= ba = a / b除操作
a %= ba = a % b模(除法的余数)
a .= ba = a . b链接两个字符串

php程序逻辑中赋值运算符举例:

<?php 
    $a = 5; 
    echo $a;  // 输出 5
    
    $b = 12; 
    $b += 100;
    echo $b;  // 输出 112
    
    $c = 100;
    $c -= 20;
    echo $c;  // 输出 80

    $d = 12;
    $d *= 5;
    echo $d;  // 输出 60
    
    $e = 10;
    $e /= 2;
    echo $e;  // 输出 5

    $f = 17;
    $f %= 4;
    echo $f;  // 输出 1
?>

3. php递增/递减运算符

  1. php递增/递减运算符
运算符名称解释
++ a先加操作a 先加 1 ,然后返回 a
a ++后加操作先返回 a ,然后 a 在加 1
-- a先减操作a 先减 1 ,然后返回 a
a --后减操作先返回 a ,然后 a 在减 1

php程序逻辑中递增/递减运算符举例:

<?php
    $a = 5; 
    echo ++$a;  // 输出 6

    $b = 12; 
    echo $b++; // 输出 13

    $c = 100;
    echo --$c; // 输出 99

    $d = 12;
    echo $d--; // 输出 11
?>

4. php比较运算符

运算符名称解释案例
a == b等于a等于b,返回true1 == 2,返回 false
a === b绝对等于a 等于 b,而且他们类型相同,返回true10 === "10",返回false
a != b不等于a 不等于 b,返回 true12 != 10,返回true
a <> b不等于a 不等于 b,返回 true12 <> 10,返回true
a !== b绝对不等于a不等于b,或类型不相同,返回true10 !== "10",返回true
a > b大于a大于b,返回true10 > 12,返回false
a < b小于a小于b,返回true10 < 12,返回true
a >= b大于等于a大于或等于b,返回true10 >= 6,返回true
a <= b小于等于a小于或等于b,返回true10 <= 12,返回true

5. php逻辑运算符

运算符名称解释实例
a and ba 和 b 都为true,返回truea = 5,b = 12,(a and b)返回true,(a > 4 and b < 15)返回true
a or ba 和 b,至少一个为true,则返回truea = 5,b = 12,(a == 5 or b == 10)返回true
a xor b异或a 和 b 有且仅有一个为true,则返回truea = 5,b = 12,(a == 5 xor b == 12)返回false
a && ba 和 b 都为true,返回truea = 5,b = 12,(a == 5 && b == 10)返回false,(a > 4 && b < 15)返回true
a || ba 和 b,至少一个为true,则返回truea = 5,b = 12,(a == 10 || b == 10)返回false
!aa不为true,则返回truea = 5,b=12,!(a == b)返回true
<?php
    $a = 10; 
    $b = "10";

    var_dump($a > 5 and $a !== $b);  // 返回 true

    var_dump($a > 5 or $a != $b);  // 返回 true

    var_dump($a > 12 xor $a !== $b);  // 返回 true

    var_dump($a > 8 && $a !== $b);  // 返回 true
    
    var_dump($a > 8 || $a !== $b);  // 返回 true

    var_dump( !($a < 12));  // 返回 false
?>

6. php数组运算符

运算符名称解释
a + b集合a 和 b 的集合
a == b相等a 和 b具有相同的健/值对,则返回true
a === b恒等a 和 b具有相同的健/值对,而且顺序相同,类型相同,则返回true
a != b不相等a 不等于 b,则返回true
a <> b不相等a 不等于 b,则返回true
a !== b不恒等a 不等于 b,则返回true

php程序逻辑中数组运算符举例:

   <?php
   $a = array(1 => 10, 2 => 100); 
   $b = array(3 => 25, 4 => 120); 
   $c = $a + $b; // $a 和 $b 两个数组合并。
   var_dump($c);
   var_dump($a == $b);
   var_dump($a === $b);
   var_dump($a != $b);
   var_dump($a <> $b);
   var_dump($a !== $b);
   ?>
   // array(4) {
   //     [1]=>
   //     int(10)
   //     [2]=>
   //     int(100)
   //     [3]=>
   //     int(25)
   //     [4]=>
   //     int(120)
   //   }
   //   bool(false)
   //   bool(false)
   //   bool(true)
   //   bool(true)
   //   bool(true)

7. 三元运算符

"?:",双引号中的问号和冒号就是三元运算符,表示如下:

(表达式一) ? (表达式二) : (表达式三)

程序表示

$a = $b ? $c:$d;

如果表达式$b结果为true,则$a = $c,否则 $a = $d;

从php5.3版本开始,可以省略表达式二这部分。 (表达式一) ? : (表达式三) 在 表达式一 求值为 true 时返回 表达式一的结果,否则返回 表达式三的结果。

举例说明

以下实例中通过判断 $_GET 请求中含有 nickname 值,如果有返回 $_GET['nickname'],否则返回 empty:

<?php
    $web_title = '编程学习';
    // 普通写法
    $title = isset($web_title) ? $web_title : 'string of empty';
    echo $title,PHP_EOL;

    // PHP 5.3+ 版本写法
    $title = $web_title ?: 'string of empty';
    echo $title, PHP_EOL;
?>

注意:PHP_EOL 是一个换行符,兼容更大平台。

在 PHP7+ 版本多了一个 null 合并运算符 ??,举例如下:

<?php
       // 如果 $_GET['nickname'] 不存在返回 'empty',否则返回 $_GET['nickname'] 的值
       $nickname = $_GET['nickname'] ?? 'empty';
       // 类似的三元运算符
       $nickname = isset($_GET['nickname']) ? $_GET['nickname'] : 'empty';
?>

8. 组合比较符(php7+)

PHP7+ 符号为 <=>,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。

语法格式如下:

$c = $a <=> $b;

解析如下:

  • 如果 $a > $b, 则 $c 的值为 1。
  • 如果 $a == $b, 则 $c 的值为 0。
  • 如果 $a < $b, 则 $c 的值为 -1。

实例演示:

<?php
    // 整型
    echo 10 <=> 10; // 0
    echo 10 <=> 20; // -1
    echo 20 <=> 10; // 1
     
    // 浮点型
    echo 3.5 <=> 3.5; // 0
    echo 2.5 <=> 5.5; // -1
    echo 8.5 <=> 6.5; // 1
     
    // 字符串
    echo "x" <=> "x"; // 0
    echo "x" <=> "y"; // -1
    echo "y" <=> "x"; // 1
?>

9. 运算符优先级

运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 3 的结果是 16 而不是 18 是因为乘号(“”)的优先级比加号(“+”)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。

如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。

没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=。

括号的使用,哪怕在不是必要的场合下,通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

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

结合方向运算符附加信息
不适用clone newclonenew
**算术运算符
不适用++ -- ~ (int) (float) (string) (array) (object) (bool) @类型递增/递减
instanceof类型
不适用!逻辑运算符
* / %算术运算符
+ - .算术运算符字符串运算符
<< >>位运算符
< <= > >=比较运算符
== != === !== <> <=>比较运算符
&位运算符引用
^位运算符
|位运算符
&&逻辑运算符
||逻辑运算符
??null 合并运算符
? :三元运算符
= += -= = *= /= .= %= &= | ^= <<= >>= ??=赋值运算符
不适用yield fromyield from
不适用yieldyield
不适用printprint
and逻辑运算符
xor逻辑运算符
or逻辑运算符

方向结合实例:

<?php
    $a = 3 * 3 % 5; // (3 * 3) % 5 = 4
    // ternary operator associativity differs from C/C++
    $a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
    
    $a = 1;
    $b = 2;
    $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>

10. 括号的使用

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

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

转载注明:

扩展查找

0 条评论

还没有人发表评论

发表评论 取消回复

记住我的信息,方便下次评论
有人回复时邮件通知我