《高性能PHP 7》读书笔记

1月 15, 2018

今天比较有空,把闲在箱子里很久的书《高性能PHP 7》拿出来看,该书是巴基斯坦的Altaf Hussain编写,书中主要介绍了PHP 7的新特性、应用性能提升、数据库性能提升,调试分析、压力负载测试、最佳实践,还有一些提升工作效率的工具。

PHP 7 新特性

第一章是介绍搭建环境,这里就省略过去,直接看第二章PHP 7 新特性

形参类型声明

PHP 7 支持的形参类型声明的类型有整型、浮点型、字符串型、布尔型,可以用在函数的形参及对象的方法上。如以下例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person
{
// 对象的方法形参
public function age(int $age)
{
return $age;
}
}

// 函数形参
function getAge(int $age)
{
return $age;
}

返回类型声明

跟形参类型一样,支持在函数和对象的方法中声明,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person
{
// 对象的方法形参
public function age(int $age): string
{
return 'Age is' . $age;
}
}

// 函数形参
function getAge(int $age): string
{
return 'Age is' . $age;
}

命名空间与use关键字批量声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 非混合的 use 声明
use Publishers\Packt\{
Book, Ebook, Video
};
use function Publishers\Packt\{
getBook, saveBook
};
use const Publishers\Packt\{
COUNT, KEY
};

// 混合模式的 use 声明
use Publishers\Packt\{
Book,
Ebook,
Video,
function getBook,
function saveBook,
const COUNT,
const KEY,
};

// 复合模式的 use 声明
use Publishers\Packt\{
Paper\Book,
Electronic\Ebook,
Media\Video,
};

匿名类

匿名类的声明与使用是同时进行的,它具备其它类所具有的所有功能,差别在于匿名类没有类名。

1
2
3
4
5
6
7
$name = new class('Dylan Woo')
{
public function __construct(string $name)
{
echo $name;
}
};

新的操作符

太空飞船操作符 <=>

  • 当符号两边相等返回0
  • 当符号右边大于符号左边时返回-1
  • 当符号左边大于符号右边时返回1

可以这么记,左减右为0时,返回0,为负数时为-1,否则为1。

null 合并运算符 ??

1
2
3
4
5
6
7
8
9
$title = $_POST['title'] ?? $_GET['title'] ?? 'No POST or GET';

// 用老式的代码实现如下
if (isset($_POST['title']))
$title = $_POST['title'];
elseif (isset($_GET['title']))
$title = $_GET['title'];
else
$title = 'No POST or GET';

统一变量语法

1
2
3
4
5
6
7
8
$first = ['name' => 'second'];
$second = 'Howdy';

// 在PHP 5.x 版本中可以这样
echo $$first['name']; //输出 Howdy

// 在PHP 7 中则会产生Notice级别的错误,并且得到不确定的内容,推荐这样
echo ${$first['name']}; //输出 Howdy

常量数组

从PHP 5.6 开始,常量数据可以使用 const 关键字来声明,方法如下。

1
const STORES = ['en','fr','ar'];

在PHP 7 中,也可以通过define函数来初始化

1
define('STORES',['en','fr','ar']);

第一章写完了,书上写了25页,我概况了一下,方便自己回忆。