《高性能PHP 7》读书笔记

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

PHP 7 新特性

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

形参类型声明

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

class Person
{
    // 对象的方法形参
    public function age(int $age)
    {
        return $age;
    }
}

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

返回类型声明

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

class Person
{
    // 对象的方法形参
    public function age(int $age): string
    {
        return 'Age is' . $age;
    }
}

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

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

// 非混合的 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,
};

匿名类

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

$name = new class('Dylan Woo')
{
    public function __construct(string $name)
    {
        echo $name;
    }
};

新的操作符

太空飞船操作符 <=>

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

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

null 合并运算符 ??

$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';

统一变量语法

$first = ['name' => 'second'];
$second = 'Howdy';

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

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

常量数组

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

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

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

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

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