首页 > 代码库 > PHP 8: PHP的运算符
PHP 8: PHP的运算符
本章将介绍PHP的运算符。
运算符这个问题在每种语言里都有,因为我们已经熟悉了编程语言里的一种或是多种,所以只需要了解一下就行了。
概括一下吧。
PHP运算符有很多种,看样子要比C/C++,C#等语言多多了。分别是:
- 算术运算符
- 赋值运算符
- 位运算符
- 比较运算符
- 错误控制运算符
- 执行运算符
- 递增/递减运算符
- 逻辑运算符
- 字符串运算符
- 数组运算符
- 类型运算符
算术运算符
例子 | 名称 | 结果 |
-$a | 取反 | $a 的负值。 |
$a + $b | 加法 | $a 和 $b 的和。 |
$a - $b | 减法 | $a 和 $b 的差。 |
$a * $b | 乘法 | $a 和 $b 的积。 |
$a / $b | 除法 | $a 除以 $b 的商。 |
$a % $b | 取模 | $a 除以 $b 的余数。 |
位运算符
例子 | 名称 | 结果 |
$a & $b | And(按位与) | 将把 $a 和 $b 中都为 1 的位设为 1。 |
$a | $b | Or(按位或) | 将把 $a 或者 $b 中为 1 的位设为 1。 |
$a ^ $b | Xor(按位异或) | 将把 $a 和 $b 中不同的位设为 1。 |
~ $a | Not(按位非) | 将 $a 中为 0 的位设为 1,反之亦然。 |
$a << $b | Shift left(左移) | 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 |
$a >> $b | Shift right(右移) | 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 |
比较运算符
例子 | 名称 | 结果 |
$a == $b | 等于 | TRUE,如果 $a 等于 $b。 |
$a === $b | 全等 | TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进) |
$a != $b | 不等 | TRUE,如果 $a 不等于 $b。 |
$a <> $b | 不等 | TRUE,如果 $a 不等于 $b。 |
$a !== $b | 非全等 | TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进) |
$a < $b | 小与 | TRUE,如果 $a 严格小于 $b。 |
$a > $b | 大于 | TRUE,如果 $a 严格 $b。 |
$a <= $b | 小于等于 | TRUE,如果 $a 小于或者等于 $b。 |
$a >= $b | 大于等于 | TRUE,如果 $a 大于或者等于 $b。 |
递增/递减运算符
例子 | 名称 | 效果 |
++$a | 前加 | $a 的值加一,然后返回 $a。 |
$a++ | 后加 | 返回 $a,然后将 $a 的值加一。 |
--$a | 前减 | $a 的值减一, 然后返回 $a。 |
$a-- | 后减 | 返回 $a,然后将 $a 的值减一。 |
逻辑运算符
例子 | 名称 | 结果 |
$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。 |
数组运算符
例子 | 名称 | 结果 |
$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。 |
如果没有对上面的运算符做特殊说明,那么说明它们和C#里的相似。
- 首先看看位运算里的左移(<<)或右移(>>),其实没有什么不同,只是符号不一样而已。
- 看看比较运算法里的“==”,“===”,这两个比较有意思,它们有什么区别呢?
2 var_dump(0 == "a"); // 0 == 0 -> true
3 var_dump("1" == "01"); // 1 == 1 -> true
4
5 switch ("a") {
6 case 0:
7 echo "0";
8 break;
9 case "a": // never reached because "a" is already matched with 0
10 echo "a";
11 break;
12 }
1)如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作float 来求值。否则就被当作整数。
2)该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。例如:
2 $var = 1 + "10.5";
3 echo "1 + \"10.5\"=".$var."; type:".gettype($var)."<Br>";
4 $var = 1 + "-1.3e3";
5 echo "1 + \"-1.3e3\"=".$var."; type:".gettype($var)."<Br>";
6 $var = 1 + "bob-1.3e3";
7 echo "1 + \"bob-1.3e3\"=".$var."; type:".gettype($var)."<Br>";
8 $var = 1 + "bob3";
9 echo "1 + \"bob3\"=".$var."; type:".gettype($var)."<Br>";
10 $var = 1 + "10 beatiful birds";
11 echo "1 + \"10 beatiful birds\"=".$var."; type:".gettype($var)."<Br>";
12 $var= 4 + "10.2 Little Apple";
13 echo "4 + \"10.2 Little Apple\"=".$var."; type:".gettype($var)."<Br>";
14 $var = "10.0 pigs " + 1;
15 echo "\"10.0 pigs \" + 1=".$var."; type:".gettype($var)."<Br>";
16 $var = "10.0 pigs " + 1.0;
17 echo "\"10.0 pigs \" + 1.0=".$var."; type:".gettype($var)."<Br>";
18 ?>
19
1 + "-1.3e3"=-1299; type:double
1 + "bob-1.3e3"=1; type:integer
1 + "bob3"=1; type:integer
1 + "10 beatiful birds"=11; type:integer
4 + "10.2 Little Apple"=14.2; type:double
"10.0 pigs " + 1=11; type:double
"10.0 pigs " + 1.0=11; type:double
既然如此,还有一个“===”,3个等于符号,它表示不仅最后转化的数值相等,而且类型也应该相等。看看下面的代码:
2 var_dump(0 === "a"); // 0 === 0 -> false
3 echo ‘<br>‘;
4 var_dump(0 === "00"); // 0 === "00" -> false
5 echo ‘<br>‘;
6 var_dump(0 === 0); // 0 === 0 -> true
7 echo ‘<br>‘;
8 ?>
bool(false)
bool(true)
3)看看逻辑运算,“或”和“与”居然有2种写法,如果你使用C/C++,C#,Java等语言的话,就用“&&"或”||"吧。如果你是VB的话,就用and,和or。当然你也可以2种都用。它们有什么区别呢?优先级的不同而已。”&&“与"||"比”and“和”or“优先级要高。
4).PHP多了一个数组运算符。有了上面的解释,相信它们不是很难了。
- 赋值运算符
$a=‘hello‘; //$a是hello。
$a+=1; //$a是1,二元赋值符
$b=‘world‘;
$c=‘hello‘;
$c.=$b;//$c是"hello world"
?>
- 错误执行运算符
如果激活了 track_errors特性,表达式所产生的任何错误信息都被存放在变量$php_errormsg中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。例如:
/* Intentional file error */
$my_file = @file (‘non_existent_file‘) or
die ("Failed opening file: error was ‘$php_errormsg‘");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn‘t exist.
?>
- 执行运算符
2 $out=`dir c:`;
3 echo ‘<pre>‘.$out.‘</pre>‘;
4 ?>
Volume Serial Number is A019-7D77
Directory of C:\
02/24/2006 10:21 PM Downloads
02/24/2006 10:09 PM Kingsoft Temp Download
05/13/2006 07:07 PM 220 cmd.txt
02/13/2006 11:40 PM WINDOWS
02/13/2006 11:47 PM Documents and Settings
02/13/2006 11:57 PM Program Files
06/24/2006 11:01 PM 482,933 nfzmLog.log
05/11/2006 10:28 PM Inetpub
05/13/2006 07:07 PM 4 response.txt
07/29/2006 05:56 PM 0 Rec.pcm
06/24/2006 09:05 PM nf
07/29/2006 05:56 PM 0 WriteAudrv.wav
07/04/2006 08:52 PM dwnSetup
07/08/2006 09:28 AM TEMP
02/14/2006 12:15 AM NVIDIA
5 File(s) 483,157 bytes 10 Dir(s) 2,116,558,848 bytes free
-
递增/递减运算符
PHP 支持 C 风格的前/后递增与递减运算符。
注: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
递增/递减运算符
例子 名称 效果 ++$a 前加 $a 的值加一,然后返回 $a。 $a++ 后加 返回 $a,然后将 $a 的值加一。 --$a 前减 $a 的值减一, 然后返回 $a。 $a-- 后减 返回 $a,然后将 $a 的值减 -
类型运算符
PHP 有一个类型运算符:instanceof。instanceof 用来测定一个给定的对象是否来自指定的对象类。
instanceof 运算符是 PHP 5 引进的。在此之前用 is_a(),但是 is_a() 已经过时了,最好用 instanceof。
2 class A { }
3 class B { }
4
5 $thing = new A;
6
7 if ($thing instanceof A) {
8 echo ‘A‘;
9 }
10 if ($thing instanceof B) {
11 echo ‘B‘;
12 }
13 ?>
- 字符运算符
PHP 8: PHP的运算符