在2020年初整站升级PHP7.4,不知道是CentOS、宝塔或者我服务器上其他什么软件的兼容问题,PHP7.4安装后断断续续出过几个问题导致站点挂掉。最近重新安装了PHP最新版的7.4.9。目前来看整体使用效果正常。但效率的提升并不很明显,没有感觉到速度明显变快。而phpmyadmin这款软件的4.9.0在切换到PHP7.4后会报一个奇怪的错。切回7.3后错误消失。另外,如果把PHPmyadmin升级到最新的4.9.5,则可以兼容PHP7.4.9。版本兼容始终是一个大问题。当然如果是新建站,还是推荐用最新版前一个的稳定版。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
+以下为转帖的正文部分+++文章源自原紫番博客-https://www.yuanzifan.com/55018.html
1. 箭头函数的支持
由于匿名函数或闭包主要应用于 JS 中,因此,他们在 PHP 中似乎很啰嗦,他们的实现和程序的维护也会更复杂一些。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
引入对箭头函数的支持使得 PHP 开发者大大简化他们的代码并且使语法更加简洁。这样,你代码的可读性和简洁性会大大提高。看下面的例子。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
因此,如果是以前的话,你必须按以下代码块写:文章源自原紫番博客-https://www.yuanzifan.com/55018.html
function cube($n)
{
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
在 PHP 7.4 发布后,你就可以按如下的方法写:文章源自原紫番博客-https://www.yuanzifan.com/55018.html
$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);
由于拥有了创建整齐、更短代码的能力。web 开发过程将会更快,也节省了你的时间。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
2. 类型化属性的支持
在下一个版本引入类型化属性可能被视为 PHP 最重要的特性更新之一。虽然之前不可能将声明方法用于类变量和属性(包括静态属性),但现在程序员能很轻松地进行编码,而无需创建特定的 getter 和 setter 方法。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
由于声明类型(不包括 void 和 callable),你可以使用可为空(Nullable)类型,即 int、float、array、string、object、iterable、self、bool 和 parent。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
如果一位 web 开发者尝试从类型中分配一个不相关的值,例如,声明 name 变量为字符串类型,他或她就会接收到 TypeError 的报错。文章源自原紫番博客-https://www.yuanzifan.com/55018.html
像箭头函数一样,类型化属性也能让 PHP 工程师写出更简短和清晰的代码。
3. 预加载
这个很酷新特性的主要目的是提升 PHP 7.4 的性能。简而言之,预加载是在 OPcache 中加载文件、框架和库的过程,绝对是新版本的最佳补充。例如,如果你使用框架,则必须为每个请求下载并重新编译其文件。
在配置 OPcache 的时候,这些代码文件首次参与请求处理,然后每次都检查它们的更改。预加载使服务器可以将指定的代码文件加载到共享内存中。请务必注意,它们将始终可用于后续所有的请求,而无需检查其他文件的改变。
还值得一提的是,在预加载期间,PHP 还消除了不必要的包含,并解决了类依赖以及具有 Traits 和 Interfaces 等的链接。
4. 协变量返回和协变量参数
目前,PHP 中大多数是不变的参数类型和不变的返回类型,这带来了一些约束。随着协变量(类型从更具体到更通用)返回和协变量(类型从更通用到更具体)参数的引入,PHP 开发者们将能够将参数类型更改为超类型之一。
5. 弱引用
在 PHP 7.4 中,弱引用类(WeakReference class)允许 web 开发者们将链接保存到不阻止其销毁的对象中。请勿将弱引用类和弱引用扩展混淆。由于这些特性,它们更容易实现类似缓存的结构。
请参考使用此类的示例:
<?php
$obj = new stdClass; $weakref = WeakReference::create($obj);
var_dump($weakref->get());
unset($obj); var_dump($weakref->get());
?>
另外,请注意,你无法序列化弱引用。
6. 合并分配运算符
合并运算符是 PHP 7.4 提供的另一个新功能。当你需要将三元运算符和 isset 方法一起使用时非常有用。如果它存在且不为空,那么就会返回第一个操作数,否则就会返回第二个操作数。
这就是个例子:
<?php // 获取 $_GET['user'] 的值,如果它不存在则返回 nobody
$username = $_GET['user'] ?? 'nobody';
// 这等价于: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// 链式合并:将返回 $_GET['user']、$_POST['user'] 以及 noboody 中第一个不为 NULL 的值
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
7. 数组表达式中的展开运算符
与 array_merge 相比,在 PHP 7.4 中,工程师们能在数组中使用展开运算符。有两个主要原因,首先,展开运算符被认为是一种语言结构,而 array_merge 是一个函数,其次是针对常量数组“编译时”的优化。因此 PHP 7.4 的性能将会提升。
看一下数组表达式中的参数解压缩示例:
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon']; var_dump($fruits);
同样,它也有可能展开同一数组多次。此外,由于可以在扩展运算符的前后添加普通元素,因此 PHP 开发人员将能够在数组中使用其语法。
8. 新的自定义对象序列化机制
在 PHP 新的版本中,有两种新的可用方法 serialize 和 unserialize。将 Serializable 接口的多功能性与实现 sleep 和 wakeup 方法结合起来,这种序列化机制使得 PHP 开发者可以避免与已存在的方法产生一些自定义的问题。发现有关 PHP 特性的更多信息。
9. 为引用提供的反射
类似于 symfony/var-dumper 之类的库,严重依赖 Reflection API 来准确罗列变量。原来,对于引用反射没有很好的支持,这迫使这些库只能依靠 hack 的方式来检测引用。在 PHP 7.4 中添加了 ReflectionReference 类来解决此问题。
10. 支持从 __toString() 方法抛出异常
之前无法从 __toString 方法中抛出异常。原因是标准库中的许多函数都执行从对象到字符串的转化,它们当中并非所有的都准备好正确的“处理”异常。作为该 RFC 的一部分,对代码库中的字符串转换进行了全面的审核,并取消了此限制。
最后的思考
在短短的一周之内,PHP 7.4 将发布。有许多新的 PHP 特性会减少内存的使用并且大大提升 PHP 7.4 的性能。你将能够避免此编程语言之前的某些限制,编写更加简洁的代码,并更快地创建 web 解决方案。
Beta 3 版本已经可以下载并用于测试服务器的测试了。然而,我并不建议你在生产环境或者正在开发的项目中使用它。如果你对于 PHP 7.4 或者 PHP 开发还有疑惑,或者仅仅只是喜欢这篇文章,欢迎在下方留下你的评论。
- 原文地址:What’s new in PHP 7.4? Top 10 features that you need to know
- 原文作者:Daniel Dan
- 译文出自:掘金翻译计划
- 译者:司徒公子
- 校对者:江五渣、suhanyujie











1F
寻找成人内容,通过探索网络上的可靠平台。研究 可靠的色情中心 以获得私密观看体验。
Also visit my web blog: 在线获取Oxycodone处方
2F
优质xxx平台 提供高质量的成人娱乐内容。选择 安全网站 以获得安全且愉快的观看体验。
Also visit my web-site: Isolatieprijs
3F
浏览露骨视频 在安全可靠的平台上进行。寻找 可靠网站 以获得一流体验。
Check out my site 怪兽公鸡地 (www.sportsbookreview.com)
4F
成人材料 可通过 有保障 的网站获取。探索 可信来源 以获得高质量内容。
Also visit my blog; 残酷手淫
5F
最新成人网站 提供创新的成人娱乐内容。发现 有保障的色情中心
以获得现代化的体验。
Look at my blog post – lesbian porn sex videos
6F
Thank you for the good writeup. It in fact was a amusement
account it. Look advanced to more added agreeable from you!
However, how could we communicate?
Feel free to visit my web page A片
7F
观看成人视频 在安全可靠的平台上进行。寻找 安全的流媒体中心
以获得一流体验。
Here is my blog … 残酷色情电影