给力星

Web Developer

重温PHP手册 – 运算符

一些小内容:

  • 对具有相同优先级的运算符,左结合方向意味着将从左向右求值,右结合方向则反之。
  • 取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
  • 取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
  • $text .= "additional text"$text = $text ."additional text" 高效。
  • int("a") = 0 ,所以 if ("a" == 0) 成立。

位运算符

例子 名称 结果
$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″)。
  • 注意优先级,$a & $b == true 先进行比较再进行按位与,不同于 ($a & $b) == true
  • 要注意数据类型的转换。如果左右参数都是字符串,则位运算符将对字符的 ASCII 值进行操作。
  • 若使用位运算,最好保证变量是整型。推荐使用 (int)$var & (int)$var2
  • 123 ^ 0 = 123 ,但 'hello' ^ 0 = 0'hello' ^ '' = '',即字符串^空字符串,结果为空。

错误控制运算符

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

@ 临时将该行的错误报告等级设置为0,如果该行触发了一个错误,错误处理程序依然会呗调用,但会以错误等级0进行调用。

执行运算符

PHP 支持一个执行运算符:反引号(``)。PHP 将尝试将反引号中的内容作为外壳命令来执行,并将其输出信息返回。也可以用函数 shell_exec()

逻辑运算符

逻辑运算符总是返回布尔值。如

$a = 0 || 'avacado';
print "A: $a\n"; // 输出 1(布尔值true)

区分 and 和 &&,还有 or 和 || : andor 的优先级比较低,低于 &&||=

$e = false || true; // 判断 (false || true) 是否成立
$f = false or true; // 先执行赋值 $f = false ,再判断 $f or true 是否成立
var_dump($e, $f);   // true, false

$g = true && false;  // 判断 (true && false) 是否成立
$h = true and false; // 先执行赋值 $f = false ,再判断 $f and true 是否成立
var_dump($g, $h);    // false, true

实现类似JavaScript中,使用 || 来进行赋值操作。

($a = $_GET['var']) || ($a = 'a default');

使用 or :

defined('VALUE') or define('VALUE', 'v');

数组运算符

数组的 + 运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略+ 运算符所实现的union操作是基于 key ,而不是基于 value。基于 value 的union可以通过 array_unique(array_merge($a,$b)) 来实现。

  • == 运算符:两个数组具有相同的键/值对则为 true(键/值对顺序不要求)。
  • === 运算符: 两个数组具有相同的键/值对并且顺序和类型都相同则为 true。