我希望 PHP 8 的功能也存在于 JavaScript 1: 2: 3:

2025-05-24

我希望 JavaScript 中也存在 PHP 8 的功能

1:

2:

3:

我知道现在还有很多人对 PHP 不满,但在我看来,PHP 最新的 7 版本(已经问世五年多了!)已经发展成为一门优秀的语言,既有趣又类型安全。除了即时编译(JIT)可以大幅提升 PHP 应用程序的性能之外,PHP 8 版本还带来了许多实用功能

我想介绍其中三个我真心希望也能在 JavaScript 中使用的功能。希望这些功能对那些还没接触过 PHP 8 的朋友有所帮助。开始吧!

#1 命名参数

假设您有一个foo具有 6 个参数的函数a,这些f参数具有不同的默认值,现在您想调用该函数false并仅传递最后一个参数的参数。

PHP 8:

foo(f: false);
//-----^
Enter fullscreen mode Exit fullscreen mode

JavaScript:

foo('test', 42, true, 'bar', 5.5, false);
//--------------------------------^
Enter fullscreen mode Exit fullscreen mode

不幸的是,在 JavaScript 中,向函数传递参数完全取决于参数的位置。我知道可以使用对象和解构来模拟命名参数,但原生特性在这里会更方便。

参见RFC:命名参数

#2 匹配表达式

PHP 的新match表达式与语句非常相似switch,只不过它是一个表达式,可以用来直接给变量赋值或返回值。如果您有两个以上的赋值可能值,这将非常方便。

PHP 8:

$fontWeight = match ($weight) {
  100, 200      => "Super Thin",
  300           => "Thin",
  400, 500      => "Normal",
  600, 700, 800 => "Bold",
  900           => "Heavy",
  default       => "Not valid"
};
Enter fullscreen mode Exit fullscreen mode

JavaScript:

let fontWeight = '';
switch (weight) {
  case 100:
  case 200:
    fontWeight = "Super Thin";
    break;
  case 300:
    fontWeight = "Thin";
    break;
  case 400:
  case 500:
    fontWeight = "Normal";
    break;
  case 600:
  case 700:
  case 800:
    fontWeight = "Bold";
    break;
  case 900:
    fontWeight = "Heavy";
    break;
  default:
    fontWeight = "Not valid";
    break;
}
Enter fullscreen mode Exit fullscreen mode

match表达式可以由 JavaScript 对象模拟,但这将需要额外的变量(因此需要更多的保留内存),并且在检查的值不允许用作对象键的情况下将会失败。

参见文档:match

#3 可选链式调用

仅当所需属性存在时才进行链式查询,这是一种非常优雅的对象查询方式。在 PHP 中,现在您可以使用 nullsafe 运算符来实现这一点。

PHP 8:

$country = $session?->user?->getAddress()?->country;
Enter fullscreen mode Exit fullscreen mode

JavaScript:

const country =
  session && session.user && session.user.getAddress() && session.user.getAddress()['country']
  ? session.user.getAddress()['country']
  : null;
Enter fullscreen mode Exit fullscreen mode

在 JavaScript 中,你仍然需要一步步检查相应的属性是否存在。目前有一个相应的TC39 提案,处于第 4 阶段,我非常期待它能成为 ECMAScript 规范的一部分。

参见RFC:Nullsafe 运算符

总结

以上我们介绍了 PHP 8 的一些新功能,它们对 JavaScript 来说也是一个很好的补充。也许你还想到了 JavaScript 中缺少的其他 PHP 功能,或者你知道比我更好的 JavaScript 方案来解决上述问题?太好了!欢迎在评论区留言讨论。


编辑日期:2021 年 2 月 10 日(扩展match示例)
发布日期:2021 年 2 月 8 日

文章来源:https://dev.to/devmount/php-8-features-i-wish-also-existed-in-javascript-1a5
PREV
在 VS Code 中签名的 Git 提交
NEXT
通过创建纯 CSS 加载器来学习 CSS 动画