[TOC]
# PHP7 與 PHP5
******
php 在 2015年12月03日發布了 7.0 正式版,帶來了許多新的特性,以下是不完全列表:
* 性能提升:PHP7比PHP5.6性能提升了兩倍。Improved performance:PHP 7 is up to twice as fast as PHP 5.6.
* 全面一致的64位支持。Consistent 64-bit support.
* 以前的許多致命錯誤,現在改成拋出異常。Many fatal errors are now Exceptions.
* 移除了一些老的不再支持的 SAPI(服務器端應用編程端口)和擴展。Removal of old and unsupported SAPIs and extensions.
* 新增了空接后操作符。The null coalescing operator(??).
* 新增加了結合比較運算符。Combined comparison Operator(<=>).
* 新增加了函數的返回類型聲明。Return Type Declarations.
* 新增加了標量類型聲明。Scalar Type Declarations.
* 新增加匿名類。Asyncmous Classes.
本教程主要講解 swoole 將要用到或有相關性的特性。
## 致命錯誤將可用異常形式拋出
在 php 7之后,大部分錯誤可通過異常形式拋出,并可使用 catch 攔截,例如:
```php
try {
$a->test(); // 未定義該對象并沒有該方法,拋出一個 Throwable 類
// Code that may throw an Exception or Error.
} catch (Throwable $t) {
var_dump($t->getMessage());
// Executed only in PHP 7,will not match in PHP 5.
} catch (Exception $e) {
}
```
運行之后將打印一條報錯語句:
```php
string(40) "Call to member function test() on null"
```
<br />
## ?? null 合并運算符
由于日常使用中存在大量同時使用三元表達式和 isset() 的情況,php 7添加了 null 合并運算符(??)這個語法糖。如果變量存在且值不為 NULL,它就會返回自身的值,否則返回它的第二個操作數。例如:
```php
$a = $b ?? 0;
// 如果 $b 為 null,則返回0.如果 $b 不為 null,則返回 $b;
```
<br />
## 標量類型聲明
標量類型聲明有兩種模式:`強制(默認)`和`嚴格模式`。現在可以使用下列類型參數(無論用強制模式還是嚴格模式):字符串(string),整數(int),浮點數(float),以及布爾值(bool)。它們擴充了 PHP 5中引入的其他類型:類名、接口,數組和回調類型。例如:
```php
<?php
function a(
?int $a /*參數必須是int或者null*/,
string $b /*參數必須是string*/,
Closure $function /*參數必須是匿名函數*/,
array $array /*參數必須是數組*/
){}
```
> 類名/接口限定都需要考慮命名空間
<br />
## 返回值類型聲明
PHP 7 增加了對返回類型聲明的支持。類似于參數類型聲明,返回類型聲明了函數返回值的類型。可用的類型與參數聲明中可用的類型相同。例如:
```php
function a():int{ // 必須返回 int 類型,否則報錯
return 1;
}
function b():?int { // 必須返回 int 類型或者 null 類型,否則報錯
return 'das';
}
```
<br />
## 太空船操作符<=>(組合比較運算符)
太空船操作符用于比較兩個表達式。當 $a 小于、等于或大于 $b 時它分別返回 -1、0或1。比較的原則是沿用 PHP 的常規比較規則進行的。
```php
// Integers
echo 1<=>1; // 0
echo 1<=>2; // -1
echo 2<=>1; // 1
// Floats
echo 1.5<=>1.5; // 0
echo 1.5<=>2.5; // -1
echo 2.5<=>1.5; // 1
// Strings
echo "a"<=>"a"; // 0
echo "a"<=>"b"; // -1
echo "b"<=>"a"; // 1
```
- 引言
- Introduction
- 運行模式
- php-fpm
- php-cli
- 基礎介紹
- 網絡協議
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 會話管理
- cookie
- session
- api/token
- linux基礎
- lnmp安裝
- 命令
- 進程管理
- 擴展安裝
- 端口監控
- 防火墻說明
- php7.0
- 部分新特性
- php回調/閉包
- 回調事件
- 閉包/匿名函數
- php多進程
- 多進程開啟
- 進程通信
- 進程信號
- 僵尸進程
- 孤兒進程
- 守護進程
- 同步/異步
- 阻塞/非阻塞
- 協程
- Swoole
- 初始Swoole
- 運行機制
- 生命周期
- composer使用
- EasySwoole
- 設計理念
- 組件說明
- 運行過程
- demo
- 提問的藝術