递增(减)运算符

常见递增(减)运算符

  • ++$a,$a 的值加一返回 $a。
  • $a++,返回 $a,然后将 $a 的值加一。
  • --$a,$a 的值减一返回 $a。
  • $a--,返回 $a,然后将 $a 的值减一。

递增(减)运算符对布尔和 NULL 类型的影响

<?php

$a = null;
$b = true;

var_dump(++$a, --$a, ++$b, --$b);

结果输出

int(1)
int(0)
bool(true)
bool(true)

布尔值不受影响,NULL 递增为 1,递减为 0

<?php

$a = 0;
$i = 'W';
while($a < 6) {
    echo "$a : ".++$i . PHP_EOL;
    $a++;
}

结果输出

0 : X
1 : Y
2 : Z
3 : AA
4 : AB
5 : AC

从结果可知

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如

$a = 'Z';

// Perl 中
$a++;//将把 $a 变成'AA'

//C 中
$a++;//将把 $a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)

注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增(减)其他字符变量则无效,原字符串没有变化。

 

逻辑运算符

常见逻辑运算符

  • $a and $b,逻辑与,如果 $a 和 $b 都为 TRUE
  • $a && $b,逻辑与,如果 $a 和 $b 都为 TRUE,其中 && 优先级高于 and
  • $a or $b逻辑或,如果 $a 或 $b 任一为 TRUE
  • $a || $b,逻辑或,如果 $a 或 $b 任一为 TRUE,|| 优先级高于 or
  • $a xor $b,逻辑异或,如果 $a 或 $b 任一为 TRUE,但不同时是,则返回 TRUE
  • ! $a,逻辑非,如果 $a 不为 TRUE
<?php

$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

var_dump($a, $b, $c, $d);

// --------------------
// "||" 比 "or" 的优先级高

// 表达式 (false || true) 的结果被赋给 $e
// 等同于:($e = (false || true))
$e = false || true;

// 常量 false 被赋给 $f,true 被忽略
// 等同于:(($f = false) or true)
$f = false or true;

// --------------------
// "&&" 比 "and" 的优先级高

// 表达式 (true && false) 的结果被赋给 $g
// 等同于:($g = (true && false))
$g = true && false;

// 常量 true 被赋给 $h,false 被忽略
// 等同于:(($h = true) and false)
$h = true and false;

var_dump($e, $f, $g, $h);

执行

bool(false)
bool(true)
bool(false)
bool(true)
bool(true)
bool(false)
bool(false)
bool(true)

从结果可知

  • foo() 虽然没有定义,但是并没有机会执行,因为之前的表达式已经确定结果,foo() 被短路。
  • &&|| 的优先级高于 == 的优先级高于 andor

 

字符串运算符

有两个字符串运算符。

  • 第一个是连接运算符 .,它返回其左右参数连接后的字符串
  • 第二个是连接赋值运算符 .=,它将右边参数附加到左边的参数后。
<?php
$a = "Hello ";
$b = $a . "World!"; // now $b contains "Hello World!"

$a = "Hello ";
$a .= "World!";     // now $a contains "Hello World!"
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。