通过 PECL 的内置支持

自 PHP 7.0 发布以来,SPL 类的性能问题日益引起开发人员的关注。PHP 7.0 并没有对早期设计的 SPL 类带来任何改进,因此许多开发人员现在对继续使用它持怀疑态度。许多开发人员为 PHP 编写了自定义库和扩展库,以提高数据结构的效率。PHP DS 就是其中之一,它是 PHP 7 数据结构的一个专门扩展。该扩展由 Joe Watkins 和 Rudi Theunissen 编写。PHP DS 扩展的官方文档可以在 PHP 手册中找到,网址是 http://php.net/manual/en/book.ds.php

该库可替代 PHP 数组,后者是一种非常灵活、动态的混合数据结构。该扩展提供了大量预置数据结构,如集合、映射、序列、集合、向量、栈、队列、优先队列等。我们将在接下来的几节中对其进行探讨。

安装

该库有不同的安装选项。最简单的是从 PECL(PHP 扩展库)中获取:

pecl install ds

如果需要,我们还可以下载源代码并编译库。为此,我们只需从 GitHub 代码库中获取代码,然后按照 git 命令进行编译:

clone https://github.com/php-ds/extension "php-ds"
cd php-ds

# Build and install the extension
phpize
./configure
make
make install

# Clean up the build files
make clean
phpize --clean

如果存在任何依赖性问题,我们还必须安装此软件包:

sudo apt-get install git build-essential php7.0-dev

对于 Windows,可从 PECL 网站下载 DLL。对于 Mac OS 用户,Homebrew 支持安装此扩展:

brew install homebrew/php/php71-ds

安装完成后,我们必须将扩展添加到我们的主 php.ini 文件中:

extension=ds.so #(php_ds.dll for windows)

如果正确添加扩展,所有预构建的类都可以通过 global \DS\ namespace 使用。

现在,让我们详细了解此扩展中预构建的 DS 类。我们将从所有类的基础——集合接口开始。

接口

集合接口是 DS 库中所有类的基础接口。所有数据结构的实现默认都实现了集合接口。集合接口确保所有类都具有类似的可遍历、可计数和 JSON 序列化行为。集合接口有四个抽象方法,分别是 clearcopyisEmptytoArray。DS 类的所有数据结构实现都实现了该接口,我们将在探索这些数据结构时看到这些方法的工作。

数据结构库的另一个重要方面是使用对象作为键。这可以通过库的 hashable 接口来实现。还有一个重要的接口,它允许在数据结构类中实现列表功能,并确保比 SPL 的双链表和固定数组具有更好的性能。