其它功能和变化

PHP 7 还引入了其他一些小改动的新特性,如数组常量的新语法、switch 语句中的多种默认情况、session_start 中的选项数组等。我们也来看看这些新功能。

常量数组

从 PHP 5.6 开始,可以使用 const 关键字初始化常量数组,如下所示:

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

现在,从 PHP 7 开始,可以使用 define 函数初始化常量数组,如下所示:

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

switch 语句中的多个默认情况

在 PHP 7 之前,允许 switch 语句中存在多个默认情况。查看以下示例:

switch(true)
{
    default:
        echo 'I am first one';
        break;
    default:
        echo 'I am second one';
}

在 PHP 7 之前,前面的代码是允许的,但在 PHP 7 中,这会导致类似下面的致命错误:

Fatal error: Switch statements may only contain one default clause in…

session_start 函数的选项数组

在 PHP 7 之前,当我们需要启动会话时,只需使用 session_start() 函数。这个函数不需要任何参数,所有在 php.ini 中定义的设置都会被使用。现在,从 PHP 7 开始,可以通过一个可选的数组来传递选项,从而覆盖 php.ini 文件中的会话设置。

下面是一个简单的例子:

session_start([
    'cookie_lifetime' => 3600,
    'read_and_close' => true
]);

从前面的例子中可以看出,可以轻松覆盖会话的 php.ini 设置。

过滤反序列化函数

序列化和取消序列化对象是常见的做法。然而,PHP 的 unserialize() 函数并不安全,因为它没有任何过滤选项,可以对任何类型的对象进行解序列化。PHP 7 在该函数中引入了过滤功能。默认的过滤选项是解序列化所有类或类型的对象。其基本工作原理如下:

$result = unserialize($object, ['allowed_classes' => ['Packt', 'Books', 'Ebooks']]);

总结

在本章中,我们讨论了新的 OOP 功能,例如类型提示、匿名类、可抛出接口、命名空间的组使用声明,以及两个重要的新运算符:Spaceship 或组合比较运算符和 null Coalesce 运算符。此外,我们还讨论了统一变量语法和其他一些新功能,例如联系人数组定义的新语法、session_start() 函数的选项数组以及 switch 语句中多个默认情况的删除。

在下一章中,我们将讨论如何提高应用程序的性能。我们将讨论 Apache 和 NGINX 以及它们用于提高性能的不同设置。

我们将讨论 PHP 的不同设置,以提高其性能。还将讨论 Google 页面速度模块、 CSS/JavaScript 组合和压缩、CDN 等。