一、算术运算符
除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。
取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。例如:
例子 | 名称 | 结果 |
---|---|---|
-$a | 取反 | $a 的负值。 |
$a + $b | 加法 | $a 和 $b 的和。 |
$a - $b | 减法 | $a 和 $b 的差。 |
$a * $b | 乘法 | $a 和 $b 的积。 |
$a / $b | 除法 | $a 除以 $b 的商。 |
$a % $b | 取模 | $a 除以 $b 的余数。 |
- <?php
- echo ( 5 % 3 ). "\n" ; // 2
- echo ( 5 % - 3 ). "\n" ; // 2
- echo (- 5 % 3 ). "\n" ; // -2
- echo (- 5 % - 3 ). "\n" ; // -2
二、赋值运算符
基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。这样就可以做一些小技巧:
- <?php
- $a = ( $b = 4 ) + 5 ; // $a 现在成了 9,而 $b 成了 4。
- $a = 3 ;
- $a += 5 ; //8; $a = $a + 5;$a -=5
- $b = "你好!" ;
- $b .= "付杰博客!" ; // 你好!付杰博客!; $b = $b . "付杰博客";
三、位运算符
位运算符允许对整型数中指定的位进行求值和操作。
位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。
要用括号确保想要的优先级。例如 $a & $b == true 先进行比较再进行按位与;而 ($a & $b) == true 则先进行按位与再进行比较。
要注意数据类型的转换。如果左右参数都是字符串,则位运算符将对字符的 ASCII 值进行操作。
例子 | 名称 | 结果 |
---|---|---|
$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”)。 |
- <?php
- $a=120;
- $b=100;
- if($a >=100 & $b>=100){
- echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
- }
- if($a >100 | $b>100){
- echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
- }
- $a=0;
- $b=1;
- if($a^$b){
- echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
- }
- $a=0;
- if(~$a){
- echo 'OK!欢迎关注www.fujieace.com!';//OK!欢迎关注www.fujieace.com!
- }
- $a=123456;
- $b=2;
- echo $a<<$b;//493824; 123456*2*2
- echo $a>>$b;//30864; 123456/2/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 。 |
- <?php
- var_dump ( 0 == "a" ); // 0 == 0 -> true
- var_dump ( "1" == "01" ); // 1 == 1 -> true
- var_dump ( "10" == "1e1" ); // 10 == 10 -> true
- var_dump ( 100 == "1e2" ); // 100 == 100 -> true
五、错误控制运算符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
如果用 set_error_handler() 设定了自定义的错误处理函数,仍然会被调用,但是此错误处理函数可以(并且也应该)调用 error_reporting() ,而该函数在出错语句前有 @ 时将返回 0。
- <?php
- echo $fujie;//报错:Notice: Undefined variable: fujie
- echo @$fujie;//什么都不输出,也不会报错!
六、执行运算符
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。
此运算符shell命令下有效;
- <?php
- $output = ` ls -al `;
- echo "<pre> $output </pre>" ;
Note:
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
与其它某些语言不同,反引号不能在双引号字符串中使用。
七、递增/递减运算符
PHP 支持 C 风格的前/后递增与递减运算符。
Note: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
例子 | 名称 | 效果 |
---|---|---|
++$a | 前加 | $a 的值加一,然后返回 $a 。 |
$a++ | 后加 | 返回 $a ,然后将 $a 的值加一。 |
--$a | 前减 | $a 的值减一, 然后返回 $a 。 |
$a-- | 后减 | 返回 $a ,然后将 $a 的值减一。 |
- <?php
- $a=12;
- echo $a++;//12
- echo $a;//13
- $a=12;
- echo ++$a;//13
- echo $a;//13
- $a=12;
- echo --$a;//11
- echo $a;//11
- $a=12;
- echo $a--;//12
- echo $a;//11
八、逻辑运算符
例子 | 名称 | 结果 |
---|---|---|
$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=0;
- $b=1;
- var_dump($a and $b);//bool(false)
- var_dump($a or $b);//bool(true)
- var_dump($a xor $b);//bool(true)
- var_dump(!$a);//bool(true)
- var_dump($a && $b);//bool(false)
- var_dump($a || $b);//bool(true)
九、字符串运算符
有两个字符串( string )运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。
- <?php
- $a = "付杰" ;
- $b = $a . "博客" ; // 付杰博客
- $a = "付杰博客:" ;
- $a .= "www.fujieace.com" ; // 付杰博客:www.fujieace.com
十、数组运算符
例子 | 名称 | 结果 |
---|---|---|
$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
- $a=0;
- $b=1;
- $c=false;
- var_dump($a + $b);//int(1)
- var_dump($a == $c);//bool(true)
- var_dump($a === $c);// bool(false)
- var_dump($a != $c);//bool(false)
- var_dump($a <> $c);//bool(false)
- var_dump($a !== $b);//bool(true)
十一、类型运算符
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例:
- <?php
- class MyClass
- {
- }
- class NotMyClass
- {
- }
- $a = new MyClass ;
- var_dump ( $a instanceof MyClass );//bool(true)
- var_dump ( $a instanceof NotMyClass );// bool(false)
十二、三元运算符
另一个条件运算符是"? :"(或三元)运算符 。
语法格式:
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
- <?php
- $a='www.fujieace.com';
- echo isset($a) ? '$a存在' : '$a不存在!';//$a存在
2016年12月29日 22:50:13 沙发
组合比较符(PHP7+)
PHP7+ 支持组合比较符,实例如下:
2016年12月30日 22:42:58 1层
@付杰 还没有用过这语法!目前都是用php5.6及以下版本,php7都还没用过!
2016年12月31日 11:29:14 2层
@你猜我是谁? 现在很多项目都是用的php5.6,以前开发的老项目还有5.2,5.3的,毕竟php7刚出来不久,很多人不敢尝试。你可以用用Php7,本博主博客就是用的php7;