学习一门编程语言总需要知道的运算符有哪些?php运算符:算数运算符、赋值运算符、递增/递减运算符、比较运算符、逻辑运算符、数组运算符、三元运算符、组合比较符(php7+)、运算符优先级、括号的使用。
php运算符:算数运算符、赋值运算符、递增/递减运算符、比较运算符、逻辑运算符、数组运算符、三元运算符、组合比较符(php7+)、运算符优先级、括号的使用。
运算符号 | 运算名称 | 解释 | 案例 | 返回结果 |
---|---|---|---|---|
a + b | 加法 | a与b相加 | 2+3 | 5 |
a - b | 减法 | a与b相减 | 5-2 | 3 |
a * b | 乘法 | a与b相乘 | 5*2 | 10 |
x / y | 除法 | a与b相除 | 5/2 | 2.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
?>
运算符 | 等同写法 | 解释 |
---|---|---|
a = b | a = b | 左操作数被设置为右侧表达式的值 |
a += b | a = a + b | 加操作 |
a -= b | a = a - b | 减操作 |
a *= b | a = a * b | 乘操作 |
a /= b | a = a / b | 除操作 |
a %= b | a = a % b | 模(除法的余数) |
a .= b | a = 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
?>
运算符 | 名称 | 解释 |
---|---|---|
++ 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
?>
运算符 | 名称 | 解释 | 案例 |
---|---|---|---|
a == b | 等于 | a等于b,返回true | 1 == 2,返回 false |
a === b | 绝对等于 | a 等于 b,而且他们类型相同,返回true | 10 === "10",返回false |
a != b | 不等于 | a 不等于 b,返回 true | 12 != 10,返回true |
a <> b | 不等于 | a 不等于 b,返回 true | 12 <> 10,返回true |
a !== b | 绝对不等于 | a不等于b,或类型不相同,返回true | 10 !== "10",返回true |
a > b | 大于 | a大于b,返回true | 10 > 12,返回false |
a < b | 小于 | a小于b,返回true | 10 < 12,返回true |
a >= b | 大于等于 | a大于或等于b,返回true | 10 >= 6,返回true |
a <= b | 小于等于 | a小于或等于b,返回true | 10 <= 12,返回true |
运算符 | 名称 | 解释 | 实例 |
---|---|---|---|
a and b | 与 | a 和 b 都为true,返回true | a = 5,b = 12,(a and b)返回true,(a > 4 and b < 15)返回true |
a or b | 或 | a 和 b,至少一个为true,则返回true | a = 5,b = 12,(a == 5 or b == 10)返回true |
a xor b | 异或 | a 和 b 有且仅有一个为true,则返回true | a = 5,b = 12,(a == 5 xor b == 12)返回false |
a && b | 与 | a 和 b 都为true,返回true | a = 5,b = 12,(a == 5 && b == 10)返回false,(a > 4 && b < 15)返回true |
a || b | 或 | a 和 b,至少一个为true,则返回true | a = 5,b = 12,(a == 10 || b == 10)返回false |
!a | 非 | a不为true,则返回true | a = 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
?>
运算符 | 名称 | 解释 |
---|---|---|
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)
"?:",双引号中的问号和冒号就是三元运算符,表示如下:
(表达式一) ? (表达式二) : (表达式三)
程序表示
$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';
?>
PHP7+ 符号为 <=>,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
语法格式如下:
$c = $a <=> $b;
解析如下:
实例演示:
<?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
?>
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 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 new | clone 和 new |
右 | ** | 算术运算符 |
不适用 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型、递增/递减 |
左 | instanceof | 类型 |
不适用 | ! | 逻辑运算符 |
左 | * / % | 算术运算符 |
左 | + - . | 算术运算符 和 字符串运算符 |
左 | << >> | 位运算符 |
无 | < <= > >= | 比较运算符 |
无 | == != === !== <> <=> | 比较运算符 |
左 | & | 位运算符 和 引用 |
左 | ^ | 位运算符 |
左 | | | 位运算符 |
左 | && | 逻辑运算符 |
左 | || | 逻辑运算符 |
右 | ?? | null 合并运算符 |
左 | ? : | 三元运算符 |
右 | = += -= = *= /= .= %= &= | ^= <<= >>= ??= | 赋值运算符 |
不适用 | yield from | yield from |
不适用 | yield | yield |
不适用 | ||
左 | 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
?>
通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。
<?php
// 括号优先运算
$a = 1;
$b = 2;
$c = 3;
$d = $a + $b * $c;
echo $d;
echo "\n";
$e = ($a + $b) * $c; // 使用括号
echo $e;
echo "\n";
?>
转载注明:
感谢博主,喝杯咖啡~
感谢博主,喝杯咖啡~
还没有人发表评论