在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
不久前,PHP7.4作为PHP脚本语言的最新功能发布,相信大家对此或多或少都已经有所了解了。本文将为大家总结一下PHP7.4新增的十大特性,分别是支持从 __toString() 方法抛出异常;类型化属性的支持;弱引用;箭头函数的支持;预加载;新的自定义对象序列化机制;合并分配运算符;数组表达式中的展开运算符;为引用提供的反射以及协变量返回和协变量参数。下面我们一起来看看新特性的详细总结。
1、支持从 __toString() 方法抛出异常
之前无法从 __toString 方法中抛出异常。原因是标准库中的许多函数都执行从对象到字符串的转化,它们当中并非所有的都准备好正确的“处理”异常。作为该 RFC 的一部分,对代码库中的字符串转换进行了全面的审核,并取消了此限制。
2、类型化属性的支持
在下一个版本引入类型化属性可能被视为 PHP 最重要的特性更新之一。虽然之前不可能将声明方法用于类变量和属性(包括静态属性),但现在程序员能很轻松地进行编码,而无需创建特定的 getter 和 setter 方法。由于声明类型(不包括 void 和 callable),你可以使用可为空(Nullable)类型,即 int、float、array、string、object、iterable、self、bool 和 parent。如果一位 web 开发者尝试从类型中分配一个不相关的值,例如,声明 name 变量为字符串类型,他或她就会接收到 TypeError 的报错。像箭头函数一样,类型化属性也能让 PHP 工程师写出更简短和清晰的代码。
3、弱引用
在 PHP 7.4 中,弱引用类(WeakReference class)允许 web 开发者们将链接保存到不阻止其销毁的对象中。请勿将弱引用类和弱引用扩展混淆。由于这些特性,它们更容易实现类似缓存的结构。请参考使用此类的示例:
<php
$obj = new stdClass;
$weakref = WeakReference::create($obj);
var_dump($weakref->get());
unset($obj);
var_dump($weakref->get());
>
另外,请注意,你无法序列化弱引用。
4、箭头函数的支持
由于匿名函数或闭包主要应用于 JS 中,因此,他们在 PHP 中似乎很啰嗦,他们的实现和程序的维护也会更复杂一些。引入对箭头函数的支持使得 PHP 开发者大大简化他们的代码并且使语法更加简洁。这样,你代码的可读性和简洁性会大大提高。看下面的例子。因此,如果是以前的话,你必须按以下代码块写:
function cube($n){
return ($n * $n * $n);
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
var_dump($fruits);
同样,它也有可能展开同一数组多次。此外,由于可以在扩展运算符的前后添加普通元素,因此 PHP 开发人员将能够在数组中使用其语法。
在 PHP 7.4 发布后,你就可以按如下的方法写:
$a = [1, 2, 3, 4, 5];
$b = array_map(fn($n) => $n * $n * $n, $a);
print_r($b);
由于拥有了创建整齐、更短代码的能力。web 开发过程将会更快,也节省了你的时间。
5、预加载
这个很酷新特性的主要目的是提升 PHP 7.4 的性能。简而言之,预加载是在 OPcache[10] 中加载文件、框架和库的过程,绝对是新版本的最佳补充。例如,如果你使用框架,则必须为每个请求下载并重新编译其文件。在配置 OPcache 的时候,这些代码文件首次参与请求处理,然后每次都检查它们的更改。预加载使服务器可以将指定的代码文件加载到共享内存中。请务必注意,它们将始终可用于后续所有的请求,而无需检查其他文件的改变。还值得一提的是,在预加载期间,PHP 还消除了不必要的包含,并解决了类依赖以及具有 Traits 和 Interfaces 等的链接。
6、新的自定义对象序列化机制
在 PHP 新的版本中,有两种新的可用方法 serialize 和 unserialize。将 Serializable 接口的多功能性与实现 sleep 和 wakeup 方法结合起来,这种序列化机制使得 PHP 开发者可以避免与已存在的方法产生一些自定义的问题。发现有关 PHP 特性的更多信息。
7、合并分配运算符
合并运算符是 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';
>
8、数组表达式中的展开运算符
与 array_merge 相比,在 PHP 7.4 中,工程师们能在数组中使用展开运算符。有两个主要原因,首先,展开运算符被认为是一种语言结构,而 array_merge 是一个函数,其次是针对常量数组“编译时”的优化。因此 PHP 7.4 的性能将会提升。
9、为引用提供的反射
类似于 symfony/var-dumper 之类的库,严重依赖 Reflection API 来准确罗列变量。原来,对于引用反射没有很好的支持,这迫使这些库只能依靠 hack 的方式来检测引用。在 PHP 7.4 中添加了 ReflectionReference 类来解决此问题。
10、协变量返回和协变量参数
目前,PHP 中大多数是不变的参数类型和不变的返回类型,这带来了一些约束。随着协变量(类型从更具体到更通用)返回和协变量(类型从更通用到更具体)参数的引入,PHP 开发者们将能够将参数类型更改为超类型之一。
以上就是PHP7.4新增十大特性的全部总结,大家觉得PHP7.4怎么样呢?可以确定的是,PHP7.4的新增特性将大大方便程序员编写代码。如果对于PHP7.4还有什么想知道的,不妨现在就下载下来看看。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
PHP命令行下的11个常用命令介绍
本文整理了PHP命令行下的11个常用命令,下面介绍给大家,它们分别是php -m、php -v、php --ini、php -h、php --info、php --rf <name>、php --rc <name>、php --re <name>、php --ri <name>和关于命令行脚本的开发。感兴趣的朋友,就跟着小编一起来看看吧!
8316
2019-11-18 16:59:24
Cookie和Session有哪些区别?
Cookie和Session有哪些区别?其实,两者作为PHP会话管理的差异是显而易见的。Cookie是数据存储在浏览器端,最大的优点是方便与JS交换数据和获取用户信息。而Session数据存储在服务器,它的优势是安全高效,不依赖浏览器端环境。严格来说,两者各自有着千丝万缕联系的同时,也是相互区别的。下面小编来带大家一起认识一下Cookie和Session。
5852
2020-02-11 21:55:31
PHP获取文件扩展名的办法有哪些?
PHP 获取文件扩展名的办法有哪些?对于PHP编程的学习者来说,PHP获取文件扩展名是一种必须要掌握的操作。无论是在PHP开发岗位的面试过程中,还是PHP入门的初步学习中,PHP获取文件扩展名都是很经典且常见的一个知识点。下面小编整理了一些PHP获取文件扩展名的办法,一起来看看吧!
5442
2020-03-23 10:41:20
PHP培训学校靠谱吗?怎么选?
PHP培训学校靠谱吗?怎么选?IT互联网快速发展,企业对PHP程序员的需求量增加,但国内PHP人才贮备的不足、培训体系的不健全PHP人才稀缺。在与其他同类编程语言相比,PHP开发速度快、运行效率高、安全性好、可扩展性强、开源自由等优势,PHP发展将成为未来WEB开发领域的主流技术体系。
5809
2020-05-05 09:58:31
PHP培训一般学什么内容?选什么从业方向?
PHP的从业方向分为3类,全栈工程师需要掌握前端、后端、移动端、服务器端开发技术,熟悉互联网系统架构思想,小到网页设计、网站开发,大到系统架构、性能调优等内容;后端工程师熟练掌握PHP后端开发技术,新浪一样的门户网站,淘宝一样的商城系统,斗鱼一样的视频直播系统等;前端工程师掌握Web前端开发技术,移动APP开发、微信小程序开发、酷炫的网站开发、桌面应用开发等。
4453
2021-05-04 16:51:18