[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
- 提问的艺术