运算符优先级 运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1+5*3

PHP运算符详解

来源:manual.phpv.net  作者:NC_Editor
摘要:运算符优先级 运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式1+5*3

位运算符

位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作这个字符串中的字符。

<?php
  
echo 12 ^ 9;
// Outputs '5'

echo "12" ^ "9"; // Outputs the Backspace character (ascii 8)
                     // ('1' (ascii 49)) ^ ('9' (ascii 57)) = #8

echo "hallo" ^ "hello"; // Outputs the ascii values #0 #4 #0 #0 #0
                           // 'a' ^ 'e' = #4?>

表格 15-3. 位运算符

例子 名称 结果
$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”)。

比较运算符

比较运算符,如同它们名称所暗示的,允许你对两个值进行比较。你还可以参考 PHP 类型比较表看不同类型相互比较的例子。

表格 15-4. 比较运算符

例子 名称 结果
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 only)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 only)
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。

另外一个条件运算符是“?:”(或三元)运算符,它和 C 以及很多其它语言的操作一样。

<?php// Example usage for: Ternary Operator$action = (empty( INSERT:CONTENT:END POST['action'])) ? 'default' : INSERT:CONTENT:END POST['action'];// The above is identical to this if/else statementif (empty( INSERT:CONTENT:END POST['action'])) {
  
$action = 'default'
;
} else {
  
$action = INSERT:CONTENT:END POST['action'
];
}?>

对于表达式 (expr1) ? (expr2) : (expr3),如果 expr1 的值为 TRUE,则此表达式的值为 expr2,如果 expr1 的值为 FALSE,则此表达式的值为 expr3

 

错误控制运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

如果激活了 track_errors 特性,表达式所产生的任何错误信息都被存放在变量 $php_errormsg 中。此变量在每次出错时都会被覆盖,所以如果想用它的话就要尽早检查。

<?php/* 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.
?>

注: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果你能从某处得到值,你就能在它前面加上 @ 运算符。例如,你可以把它放在变量,函数和 include() 调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 ifforeach 等。

参见 error_reporting() 及手册中“错误处理及日志函数”的有关章节。

注: 错误控制前缀“@”不会屏蔽解析错误的信息。

警告

目前的“@”错误控制运算符前缀甚至使导致脚本终止的严重错误的错误报告也失效。这意味着如果你在某个不存在或类型错误的函数调用前用了“@”来抑制错误信息,那脚本会没有任何迹象显示原因而死在那里。

执行运算符

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回(例如,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。

<?php
$output
= `ls -al
`;
echo
"<pre>$output</pre>"
;?>

注: 反引号运算符在激活了 安全模式 或者关闭了 shell_exec() 时是无效的。

加一/减一运算符

PHP 支持 C 风格的前/后加一与减一运算符。

表格 15-5. 加一/减一运算符

例子 名称 效果
++$a 前加 $a 的值加一,然后返回 $a。
$a++ 后加 返回 $a,然后将 $a 的值加一。
--$a 前减 $a 的值减一, 然后返回 $a。
$a-- 后减 返回 $a,然后将 $a 的值减一。

一个简单的示例脚本:

<?phpecho "<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-1. 涉及字符变量的算数运算

<?php
$i
= 'W'
;
for(
$n=0; $n<6; $n
++)
  echo ++
$i . "\n"
;
/*
  Produces the output similar to the following:

X
Y
Z
AA
AB
AC

*/?>

  • 轻松应考、高效赋能
  • 好学考试H5触屏版开放内测
  • 小初高古诗文大全
  • 祝贺【好学触屏】公众号虎力全开、杨帆起航!