## 表达式
### [比较运算符](http://php.net/manual/en/language.operators.comparison.php)
| 运算符 | 名称 | 例子 | 结果 |
| --- | --- | --- | --- |
| == | 等于 | $x == $y | 如果 $x 等于 $y,则返回 true。 |
| === | 全等(完全相同) | $x === $y | 如果 $x 等于 $y,且它们类型相同,则返回 true。 |
**差:**
弱对比会不会判断变量值的类型
```php
$a = '42';
$b = 42;
if( $a != $b ) {
//这里始终执行不到
}
```
对比 $a != $b 返回了 `FALSE` 但应该返回 `TRUE` !
字符串 '42' 跟整数 42 不相等
**优:**
强对比判断检查变量值类型和数据
```php
$a = '42';
$b = 42;
if ($a !== $b) {
// ....
}
```
### 运算符??(PHP7+的新特性)
| 例子 | 名称 | 结果 |
|---|---|---|
| $a ?? $b ?? $c | NULL 合并操作符 | 从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供。 |
**差:**
```php
function test(): string
{
// 定义变量$a,$b和$c
if (isset($a) && !empty($a)) {
return $a;
} else if (isset($b) && !empty($b)) {
return $b;
} else if (isset($c) && !empty($c)) {
return $c;
}
}
$ret = test();
```
**优:**
```php
$ret = $a ?? $b ?? $c;
```
### 运算符<=>(PHP7+的新特性)
| 例子 | 名称 | 结果 |
|---|---|---|
| $a <=> $b | 太空船运算符(组合比较符) | 当$a小于、等于、大于$b时 分别返回一个小于、等于、大于0的integer 值 |
**差:**
```php
$a = 'a';
$z = 'z';
$aOrdNum = ord($a);
$zOrdNum = ord($z);
if ($aOrdNum < $zOrdNum){
echo sprintf("%s小于%s\n", $a, $z);
}
```
**优:**
```php
$a = 'a';
$z = 'z';
if (($a <=> $z) <0 ){
echo sprintf("%s小于%s\n", $a, $z);
}
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
```