Categories
PHP

PHP 8 新特性: Nullsafe 操作符(空安全)

PHP 8 新增了 Nullsafe 操作符(空安全):?->,顾名思义,以一种安全的方式操作可能为 null 的对象。以此可以简化对于 null 值的逻辑判断。 准备 我们先准备一些类和实例。如下: 以往实现 不严谨的程序员,想获取 user1 的 total 信息时,可能会直接取值。如下: 当然,程序会直接报错: 有点经验的程序员这么做(实际会经常这么做): 当然,实际中还需要对 fanInfo 等做一系列判断,也可能无法避免一些嵌套的判断。 Nullsafe 实现 现在有了 Nullsafe 操作符,我们可以直接这样用: 输出结果: 当然 user1 为 null 时,表达式直接返回了 null,且不再会调用属性 fanInfo 和后续操作。下面详细介绍求值策略。 短路求值策略 Nullsafe 操作符遵循的是完全短路(Full Short Circuiting)的求值策略。 举例说明: 当 a 为 null 时,方法 b 不会被调用,$foo 被赋值为 null。 当 a 为 null […]

Categories
PHP

PHP 8 新特性:命名参数

PHP 8 新增了语言特性:命名参数(Named Arguments)。以往只能按照函数定义的顺序传递参数,现在可以指定参数名称自定义顺序。并且可以跳过带默认值的参数。 正文 我们举例说明。 我们先定义一个函数,接受三个参数。函数中直接将实际接收到的参数打印出来。代码如下: 在 PHP 7 中,我们调用函数时,不允许带参数名称。如下: 在 PHP 8 中,我们可以像下面这样。 指定默认顺序参数名,效果同上 参数一二顺序换位,不受影响 跳过带有默认值的参数 type。 无参数名和带参数名混合使用 话外 除了 PHP,还有哪些语言支持命名参数呢? Python:见《Expressions -> Calls》、《Python Keyword Arguments》 C# 4:见《命名实参和可选实参》 Swift:见《Functions -> Functions With Multiple Parameters》 参考资料: PHP RFC: Named Arguments (完) 扫码阅读和分享