## 表達式
### [比較運算符](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
```