标签:
php运算符it |
分类: Development |
1. 运算符优先级
| 结合方向 | 运算符 | 附加信息 |
|---|---|---|
| 非结合 | new | new |
| 左 | [ | array() |
| 非结合 | ++ -- | 递增/递减运算符 |
| 非结合 | ! ~ - (int) (float) (string) (array) (object) @ | 类型 |
| 左 | * / % | 算数运算符 |
| 左 | + - . | 算数运算符和字符串运算符 |
| 左 | << >> | 位运算符 |
| 非结合 | < <= > >= | 比较运算符 |
| 非结合 | == != === !== | 比较运算符 |
| 左 | & | 位运算符和引用 |
| 左 | ^ | 位运算符 |
| 左 | | | 位运算符 |
| 左 | && | 逻辑运算符 |
| 左 | || | 逻辑运算符 |
| 左 | ? : | 三元运算符 |
| 右 | = += -= *= /= .= %= &= |= ^= <<= >>= | 赋值运算符 |
| 左 | and | 逻辑运算符 |
| 左 | xor | 逻辑运算符 |
| 左 | or | 逻辑运算符 |
| 左 | , | 多处用到 |
左联表示表达式从左向右求值,右联相反。
2. 算术运算符
| 例子 | 名称 | 结果 |
|---|---|---|
| -$a | 取反 | $a 的负值。 |
| $a + $b | 加法 | $a 和 $b 的和。 |
| $a - $b | 减法 | $a 和 $b 的差。 |
| $a * $b | 乘法 | $a 和 $b 的积。 |
| $a / $b | 除法 | $a 除以 $b 的商。 |
| $a % $b | 取模 | $a 除以 $b 的余数。 |
除号(“/”)总是返回浮点数,即使两个运算数是整数(或由字符串转换成的整数)也是这样。
注: 取模 $a % $b 在 $a 为负值时的结果也是负值。
3. 赋值运算符
基本的赋值运算符是“=”。一开始可能会以为它是“等于”,其实不是的。
它实际上意味着把右边表达式的值赋给左边的运算数。
赋值运算表达式的值也就是所赋的值。也就是说,“$a = 3”的值是 3。这样就可以做一些小技巧:
<?php
$a = ($b = 4) + 5; // $a 现在成了 9,而 $b 成了 4。
?>
在基本赋值运算符之外,
还有适合于所有二元算术和字符串运算符的“组和运算符”,这样可以在一个表达式中使用它的值并把表达式的结果赋给它,例如:
<?php
$a = 3;
$a += 5; // sets $a to 8, as if we had said: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!";
?>
注意赋值运算将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在很密集的循环中拷贝一些值例如大数组。自 PHP 4 起支持引用赋值,用 $var = &$othervar; 语法,但在 PHP 3 中不可能这样做。引用赋值意味着两个变量都指向同一个数据,没有任何数据的拷贝。
4. 位运算符
位运算符允许对整型数中指定的位进行置位。
如果左右参数都是字符串,则位运算符将操作字符的 ASCII 值。
| 例子 | 名称 | 结果 |
|---|---|---|
| $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 次(每一次移动都表示“乘以 2”)。 |
| $a >> $b | Shift right(右移) | 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。 |
在 32 位系统上不要右移超过 32 位。不要在结果可能超过 32 位的情况下左移。
5. 比较运算符
| 例子 | 名称 | 结果 |
|---|---|---|
| $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。 |
如果比较一个整数和字符串,则字符串会被转换为整数。
如果比较两个数字字符串,则作为整数比较。
此规则也适用于 switch 语句。
对于多种的类型,比较运算符根据下表比较(按顺序)。
比较多种类型
| 运算数 1 类型 | 运算数 1 类型 | 结果 |
|---|---|---|
| null 或 string | string | 将 NULL 转换为 "",进行数字或词汇比较 |
| bool 或 null | 任何其它类型 | 转换为 bool,FALSE < TRUE |
| object | object | 内置类可以定义自己的比较,不同类不能比较,相同类和数组同样方式比较属性(PHP 4 中),PHP 5 有其自己的说明 |
| string,resource 或 number | string,resource 或 number | 将字符串和资源转换成数字,按普通数学比较 |
| array | array | 具有较少成员的数组较小,如果运算数 1 中的键不存在于运算数 2 中则数组无法比较,否则挨个值比较(见下例) |
| array | 任何其它类型 | array 总是更大 |
| object | 任何其它类型 | object 总是更大 |
6. 错误控制运算符:@
PHP 支持一个错误控制运算符:@。
当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
如果激活了 track_errors 特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg
中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。
<?php
$my_file = @file ('non_existent_file') or
// this works for any expression_r, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
注: @ 运算符只对表达式有效。
对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。
例如,可以把它放在变量,函数和 include() 调用,常量,等等之前。
不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。
7. 执行运算符
PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP
将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数
shell_exec() 相同。
<?php
$output = `ls -al`;
echo
"<pre>$output</pre>";
?>
注: 反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
参见函数 popen()、proc_open() 及手册中程序执行函数和 PHP 的命令行模式的有关章节。
8. 递增/递减运算符
PHP 支持 C 风格的前/后递增与递减运算符。
| 例子 | 名称 | 效果 |
|---|---|---|
| ++$a | 前加 | $a 的值加一,然后返回 $a。 |
| $a++ | 后加 | 返回 $a,然后将 $a 的值加一。 |
| --$a | 前减 | $a 的值减一, 然后返回 $a。 |
| $a-- | 后减 | 返回 $a,然后将 $a 的值减一。 |
注: 递增/递减运算符不影响布尔值。递减 NULL 值也没有效果,但是递增 NULL 的结果是 1。
一个简单的示例脚本:
<?php
echo
"<h3>Postincrement</h3>";
$a = 5;
echo "Should be 5: " . $a++ . "<br
/>\n";
echo "Should be 6: " . $a . "<br
/>\n";
echo
"<h3>Preincrement</h3>";
$a = 5;
echo "Should be 6: " . ++$a . "<br
/>\n";
echo "Should be 6: " . $a . "<br
/>\n";
echo
"<h3>Postdecrement</h3>";
$a = 5;
echo "Should be 5: " . $a-- . "<br
/>\n";
echo "Should be 4: " . $a . "<br
/>\n";
echo
"<h3>Predecrement</h3>";
$a = 5;
echo "Should be 4: " . --$a . "<br
/>\n";
echo "Should be 4: " . $a . "<br
/>\n";
?>
在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。
例如,在 Perl 中 'Z'+1 将得到 'AA',
而在 C 中,'Z'+1 将得到 '['(ord('Z') == 90,ord('[') == 91)。
注意字符变量只能递增,不能递减。 例子 15-4. 涉及字符变量的算数运算
<?php
$i = 'W';
for ($n=0; $n<6; $n++) {
}
?>
上例将输出:
X
Y
Z
AA
AB
AC
9. 逻辑运算符
| 例子 | 名称 | 结果 |
|---|---|---|
| $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。 |
10. 字符串运算符
有两个字符串运算符。
第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。
第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数后。更多信息见赋值运算符。
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"
$a = "Hello ";
$a .=
"World!";
?>
11.数组运算符
| 例子 | 名称 | 结果 |
|---|---|---|
| $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 = array("a" => "apple", "b" =>
"banana");
$b = array("a" => "pear", "b" =>
"strawberry", "c" => "cherry");
$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);
$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>
执行后,此脚本会显示: Union of $a and $b:
array(3) {
}
Union of $b and $a:
array(3) {
}
数组中的单元如果具有相同的键名和值则比较时相等。
例子 15-5. 比较数组
<?php
$a = array("apple", "banana");
$b = array(1 => "banana", "0" =>
"apple");
var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

加载中…


