运算符
运算符就是通过一个或者多个符号产生另外一个结果的符号。常见的有加减乘除等
运算符优先级
运算符是有优先级的,优先级的先结合。
| 结合方向 | 运算符 | 附加信息 |
|---|---|---|
| 无 | clone new | clone 和 new |
| 左 | [ | array() |
| 右 | ** | 算术运算符 |
| 右 | ++ -- ~ (int) (float) (string) (array) (object) (bool) @ | 类型和递增/递减 |
| 无 | instanceof | 类型 |
| 右 | ! | 逻辑运算符 |
| 左 | *** / % | 算术运算符 |
| 左 | + - . | 算术运算符和字符串运算符 |
| 左 | << >> | 位运算符 |
| 无 | < <= > >= | 比较运算符 |
| 无 | == != === !== <> <=> | 比较运算符 |
| 左 | & | 位运算符和引用 |
| 左 | ^ | 位运算符 |
| 左 | | | 位运算符 |
| 左 | && | 逻辑运算符 |
| 左 | || | 逻辑运算符 |
| 左 | ?? | 比较运算符 |
| 左 | ? : | ternary |
| right | = += -= *= **= /= .= %= &= |= ^= <<= >>= | 赋值运算符 |
| 左 | and | 逻辑运算符 |
| 左 | xor | 逻辑运算符 |
| 左 | or | 逻辑运算符 |
php
3+2*4// 11
5/3 // 1.33333
5%2 //2- 除法运算符总是返回浮点数.
- 取模运算符的操作数在运算之前都会转换成整数(除去小数部分)
递增、递减
| ++$a | 前加 | $a 的值加一,然后返回 $a。 |
|---|---|---|
| $a++ | 后加 | 返回 $a,然后将 $a 的值加一。 |
| --$a | 前减 | $a 的值减一, 然后返回 $a。 |
| $a-- | 后减 | 返回 $a,然后将 $a 的值减一。 |
php
$a = 1;
echo $a++;//1
$b = 1;
echo ++$b;
$c = 'A';
echo ++$c;//B
$bool = false;
$bool++;
var_dump($bool); //false;- 处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的
- 字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)
- 递增或递减布尔值没有效果。
位运算
| $a &\ $b | And(按位与) | 将把 $a 和 $b 中都为 1 的位设为 1。 |
|---|---|---|
| $a |$b | Or(按位或) | 将把 $a 和 $b 中任何一个为 1 的位设为 1。 |
| $a ^ $b | Xor(按位异或) | 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。 |
| ~ $a | Not(按位取反) | 将 $a 中为 0 的位设为 1,反之亦然。 |
| $a << $b | Shift left(左移) | 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。 |
| $a >> $b | Shift right(右移) | 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。 |
比较运算符
| $a == $b | 等于 | TRUE,如果类型转换后 $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,如果 $a 严格小于 $b。 |
| $a > $b | 大于 | TRUE,如果 $a 严格大于 $b。 |
| $a <= $b | 小于等于 | TRUE,如果 $a 小于或者等于 $b。 |
| $a >= $b | 大于等于 | TRUE,如果 $a 大于或者等于 $b。 |
| $a <=> $b | 太空船运算符(组合比较符) | 当$a小于、等于、大于$b时 分别返回一个小于、等于、大于0的integer 值。 PHP7开始提供. |
| $a ?? $b ?? $c | NULL 合并操作符 | 从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供。 |
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被[转换为数值]并且比较按照数值来进行.
由于浮点数 float的内部表达方式,不应比较两个浮点数float是否相等。
php
$a = 'abc';
$a == 1;//false
$a = 0;
$b = 'abc';
$a == $b;//true;执行运算符
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回
php
`ls /home/`逻辑运算符
| $a and $b | And(逻辑与) | TRUE,如果 $a 和 $b 都为 TRUE。 |
|---|---|---|
| $a or $b | Or(逻辑或) | TRUE,如果 $a 或 $b 任一为 TRUE。 |
| $a xor $b | Xor(逻辑异或) | TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。 |
| ! $a | Not(逻辑非) | TRUE,如果 $a 不为 TRUE。 |
| $a && $b | And(逻辑与) | TRUE,如果 $a 和 $b 都为 TRUE。 |
| $a || $b | Or(逻辑或) | TRUE,如果 $a 或 $b 任一为 TRUE。 |
php
$a = (true || false);字符串连接符
字符串连接符号 点(.)
php
$a = 1;
$b = 222
echo $a . $b; //1222类型运算符
instanceof 用于确定一个 PHP 变量是否属于某一类
php
$c = new C();
$c instanceof C;