运算符是能够经过给出的一或多个值(用编程行话来讲,表达式)来产生另一个值(因而全部结构作为一个表达式)的东西。
PHP8的运算符有非常多,按类型分有一元运算符、二元运算符、三元运算符。
一元运算符只对一个表达式执行操作,只能接受一个值,例如 !(规律取反运算符)或 ++(递增运算符)。
二元运算符用于两个操作数之间,可接受两个值,例如熟练的算术运算符 +(加)和 -(减),大都数 PHP 运算符都是这种。
三元运算符用在三个操作数之间,可接受三个值,列如独一的三元运算符 ? :。
本节重点的知识点有:运算符优先级、算术运算符、赋值运算符、位运算符、比较运算符、错误掌控运算符、执行运算符、递增/递减运算符、规律运算符、字符串运算符、数组运算符、类型运算符、三元运算符。
1、运算符优先级
PHP8 的运算符完整列表见下面运算符优先级。解释了运算符优先级和结合方向,这掌控着在表达式包括有若干个区别运算符时到底怎么样对其求值。
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 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 是合法的, 由于 == 的优先级小于 <=。
相关性仅对二(三)元操作符有道理。 一元操作符是前缀或后缀,因此不适用该概念。 例如 !!$a 仅可分为 !(!$a)。
括号的运用,哪怕在不是必要的场合下,经过括号的配对来知道标明运算次序,而非靠运算符优先级和结合性来决定,一般能够增多代码的可读性。
下表根据优先级从高到低列出了运算符。同一行中的运算符拥有相同优先级,此时它们的结合方向决定求值次序。
2、算术运算符
1、+$a , 标识运算, 按照状况将 $a 转化为 int 或 float。
2、-$a ,取反运算, $a 的负值。
3、$a + $b, 加法运算, $a 和 $b 的和。
4、$a - $b, 减法运算, $a 和 $b 的差。
5、$a * $b, 乘法运算, $a 和 $b 的积。
6、$a / $b, 除法运算, $a 除以 $b 的商。
7、$a % $b, 取模运算, $a 除以 $b 的余数。
8、$a ** $b, 求幂运算, $a 的 $b次方的值。
示例: <?php
echo (5 % 3); // 打印 2
echo "<br>"; //换行表示
echo (5 % -3); // 打印 2
echo "<br>"; //换行表示
echo (-5 % 3); // 打印 -2
echo "<br>"; //换行表示
echo (-5 % -3); // 打印 -2
?>运行结果如下: 2
2
-2
-2
3、赋值运算符
赋值运算符的功效是把必定的数值加载给特定的变量。基本的赋值运算符是“=”。即把右边表达式的值赋给左边的运算数(变量)。
3.1、算术赋值运算符
1、$a += $b, 等同于 $a = $a + $b ,加法运算符
2、$a -= $b, 等同于 $a = $a - $b ,减法运算符
3、$a *= $b, 等同于 $a = $a * $b ,乘法运算符
4、$a /= $b, 等同于 $a = $a / $b ,除法运算符
5、$a %= $b,等同于 $a = $a % $b, 取模运算符
6、$a **= $b ,等同于 $a = $a ** $b ,指数运算符
3.2、位赋值运算符
1、$a &= $b, 等同于$a = $a & $b, 按位与
2、$a |= $b, 等同于$a = $a | $b ,按位或
3、$a ^= $b ,等同于$a = $a ^ $b ,按位异或
4、$a <<= $b,等同于 $a = $a << $b, 左移
5、$a >>= $b ,等同于$a = $a >> $b, 右移
3.3、其他赋值运算符
1、$a .= $b, 等同于$a = $a . $b ,字符串拼接
2、$a ??= $b, 等同于$a = $a ?? $b ,NULL 合并
4、位运算符
位运算符准许对整型数中指定的位进行求值和操作。
1、$a & $b ,And(按位与), 将把 $a 和 $b 中都为 1 的位设为 1。
2、$a | $b ,Or(按位或), 将把 $a 和 $b 中任何一个为 1 的位设为 1。
3、$a ^ $b ,Xor(按位异或), 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
4、~ $a Not,(按位取反), 将 $a 中为 0 的位设为 1,反之也然。
5、$a << $b, Shift left(左移), 将 $a 中的位向左移动 $b 次(每一次移动都暗示“乘以 2”)。
6、$a >> $b, Shift right(右移), 将 $a 中的位向右移动 $b 次(每一次移动都暗示“除以 2”)。
要用括号保证想要的优先级。例如 $a & $b == true 先进行比较再进行按位与;而 ($a & $b) == true 则先进行按位与再进行比较。
位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走寓意着正负号不被保存。右移时左侧以符号位填充,寓意着正负号被保存。
倘若 &、 | 和 ^ 运算符的上下两个操作对象都是字符串,将对会构成字符串的字符 ASCII 值执行操作,结果亦是一个字符串。除此之外,两个操作对象都将 转换为整数 ,结果亦将会是整数。
倘若 ~ 运算符的操作对象是字符串,则将对构成字符串的字符 ASCII 值进行操作, 结果将会是字符串,否则操作对象和结构都会是整数。
<< 和 >> 运算符的操作对象和结果始终都是整数。
5、比较运算符
比较运算符,如同它们名叫作所暗示的,准许对两个值进行比较。
1、$a == $b ,等于, true,倘若类型转换后 $a 等于 $b。
2、$a === $b, 全等于, true,倘若 $a 等于 $b,并且它们的类型亦相同。
3、$a != $b ,不等, true,倘若类型转换后 $a 不等于 $b。
4、$a <> $b ,不等 ,true,倘若类型转换后 $a 不等于 $b。
5、$a !== $b ,不全等 ,true,倘若 $a 不等于 $b,或它们的类型区别。
6,、$a < $b, 小与, true,倘若 $a 严格少于 $b。
7、$a > $b, 大于, true,倘若 $a 严格大于 $b。
8、$a <= $b, 少于等于, true,倘若 $a 少于或等于 $b。
9,、$a >= $b, 大于等于, true,倘若 $a 大于或等于 $b。
十、$a <=> $b, 太空船运算符(组合比较符), 当$a少于、等于、大于 $b时 分别返回一个少于、等于、大于0的 int 值。
6、错误掌控运算符
PHP 支持一个错误掌控运算符“@”。当将其安置在一个 PHP 表达式之前,该表达式可能产生的任何错误诊断都被控制。
7、执行运算符
PHP 支持一个执行运算符:反引号(``)。重视这不是单引号!PHP 将尝试将反引号中的内容做为 shell 命令来执行,并将其输出信息返回(即,能够赋给一个变量而不是简单地丢弃到标准输出)。运用反引号运算符“`”的效果与函数 shell_exec() 相同。 <?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>重视:
1、关闭了 shell_exec() 时反引号运算符是无效的。
2、与其它某些语言区别,反引号不可在双引号字符串中运用。
8、递增/递减运算符
PHP 支持 C 风格的前/后递增与递减运算符。
1、++$a, 前加: $a 的值加一,而后返回 $a。
2、$a++ ,后加: 返回 $a,而后将 $a 的值加一。
3、--$a ,前减 :$a 的值减一, 而后返回 $a。
4、$a-- ,后减 :返回 $a,而后将 $a 的值减一。
9、规律运算符
一个编程语言最重要的功能之一便是进行规律判断和运算,例如规律与、规律或、规律非、规律异或。
1、$a and $b ,And(规律与): true,倘若 $a 和 $b 都为 true。
2、$a or $b, Or(规律或): true,倘若 $a 或 $b 任一为 true。
3、$a xor $b, Xor(规律异或): true,倘若 $a 或 $b 任一为 true,但区别时是。
4、! $a, Not(规律非): true,倘若 $a 不为 true。
5、$a && $b ,And(规律与): true,倘若 $a 和 $b 都为 true。
6、$a || $b, Or(规律或): true,倘若 $a 或 $b 任一为 true。
十、字符串运算符
有两个字符串(string)运算符。第1个是连接运算符(“.”),它返回其上下参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。 <?php
$a = "你好"; //给变量$a赋值
$b = $a . "PHP8"; //此刻 $b 包括 "你好 PHP8"
echo $b; //输出变量$b
echo "<br>"; //换行表示
$a = "你好"; //给变量$a赋值
$a .= "PHP8"; //此刻 $a 包括 "你好 PHP8"
echo $a; //不打引号输出变量$a
echo "<br>"; //换行表示
echo $a; //打单引号输出变量$a
echo "<br>"; //换行表示
echo "$a"; //打双引号输出变量$a
?>运行结果如下: 你好PHP8
你好PHP8
$a
你好PHP8
温馨提醒,针对字符串型数据输出,能够运用单引号,亦能够运用双引号,亦能够不运用引号。
运用单引号和双引号输出同一个变量,结果是区别的。单引号输出的是字符串,双引号和不带引号输出的是变量的值。
十1、数组运算符
1、$a + $b ,联合: $a 和 $b 的联合。
2、$a == $b ,相等 :倘若 $a 和 $b 拥有相同的键/值对则为 true。
3、$a === $b ,全等: 倘若 $a 和 $b 拥有相同的键/值对并且次序和类型都相同则为 true。
4、$a != $b, 不等 :倘若 $a 不等于 $b 则为 true。
5、$a <> $b, 不等 :倘若 $a 不等于 $b 则为 true。
6、$a !== $b, 不全等: 倘若 $a 不全等于 $b 则为 true。
+ 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。
数组中的单元倘若拥有相同的键名和值则比较时相等。
十2、类型运算符
运用instanceof 来进行实例引用。
1、确定一个 PHP 变量是不是属于某一类 class 的实例: <?php
class MyClass
{
}
class NotMyClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof NotMyClass);
?>以上示例会输出: bool(true)
bool(false)2、确定一个变量是不是继承自某一父类的子类的实例: <?php
class ParentClass
{
}
class MyClass extends ParentClass
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof ParentClass);
?>以上示例会输出: bool(true)
bool(true)3、检测一个对象是不是不是某个类的实例 <?php
class MyClass
{
}
$a = new MyClass;
var_dump(!($a instanceof stdClass));
?>以上示例会输出: bool(true)4、用于确定一个变量是不是实现了某个接口的对象的实例 <?php
interface MyInterface
{
}
class MyClass implements MyInterface
{
}
$a = new MyClass;
var_dump($a instanceof MyClass);
var_dump($a instanceof MyInterface);
?>以上示例会输出: bool(true)
bool(true)十3、三元运算符
三元运算符是一种在编程中常用的要求语句,亦被叫作为三目运算符或要求运算符。它一般用于简化要求判断和赋值操作。
在PHP8中,三元运算符“?:”被叫作为“三元运算符”或“三目运算符”,其语法格式为:
要求表达式 ? 表达式1 : 表达式2
其中,要求表达式为一个布尔表达式,倘若该表达式的值为真,则返回表达式1的值;倘若该表达式的值为假,则返回表达式2的值。
例如,以下是一个运用三元运算符的示例: <?php
$a = "99>88";
$b = $a ?: "100不大于99";
$c = $a ? "100大于99" : "100不大于99";
echo $b;
echo "<br>";
echo $c;
?>运行结果如下: 99>88
100大于99
到此为止,本文重点讲解的运算符优先级、算术运算符、赋值运算符、位运算符、比较运算符、错误掌控运算符、执行运算符、递增/递减运算符、规律运算符、字符串运算符、数组运算符、类型运算符、三元运算符就讲解完毕了,大众慢慢参考学习。
space
|