其它功能和变化
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 等。