为什么 PHP 8 会很棒
PHP 8 即将发布。这是一个重要的版本,它带来了重大的改变,但也保留了诸多优秀的功能。
免责声明
这是个人选择,而不是详尽的清单。
细节虽小,功能却很棒
再次强调,这不是一个详尽的列表,但一些变化将会对我们的日常 PHP 工作有所帮助。
::class
可用于对象
您无需调用对象上的中介get_class()
,而是可以直接执行此操作:
$myObject = new MyClass();
var_dump($myObject::class);
参数尾随逗号
在 PHP 7 中,您可以在数组中添加尾随逗号,如下所示:
$myArray = [ "pull", "push", "jump",];
但是你不能用函数和方法的参数来实现这一点。在 PHP8 中,你可以!
new Uri(
$scheme,
$user,
$pass,
$host,
$port,
$path,
$query,
$fragment, // <-- Huh, this is allowed!
);
str_* 新魔法
我在rfc中读到过str_contains
,str_starts_with()
或者。比任何正则表达式都更简单、更好、更强大。str_ends_with()
strpos
打破常规,赢得胜利
PHP 8 默认会抛出比 PHP 7 多得多的错误。PHP 8 之前弃用的所有内容都已被删除!
操作@
员
PHP 运算符的这个黑暗领主将不再沉默致命错误!!!
准备战斗
静态调用非静态方法的致命错误
下面的代码已经触发了一些错误,但是在 PHP 8 中,它将引发致命错误!
class MyClass {
public function myMethod() {}
}
MyClass::myMethod();
新的默认错误报告级别
E_ALL
将是默认值。同样,不会再出现静默错误。
不要弄乱未定义的!
PHP 8 会将许多警告和通知转换为错误,例如:
- 未定义变量
- 除以零
JIT 免责声明
如果不庆祝 JIT 的诞生,就不可能撰写任何有关 PHP 8 的文章 \0/。
即时编译应该会在某种程度上提高性能。在 PHP 8 之前,PHP 通过将 PHP 代码转换为虚拟机运行的指令(~ 操作码)来执行代码。
JIT 编译器将 PHP 代码转换为 x86 机器代码,直接在 CPU 上运行。
然而,正如 Nikita Popov 所说,这对于涉及数学计算的代码而不是一般的代码来说意义重大。
不要期望获得与从 PHP 5 迁移到 PHP 7 相同的惊人效果。
杀手级功能
一些特征将具有决定性作用。
联合类型
在 PHP 8 之前,联合类型仅在 phpdoc 中可用:
/**
* @var int|float $number
*/
private $number;
使用 PHP 8,您将编写:
private int|float $number
这个想法是将更多类型信息从 phpdoc 移到函数签名中。虽然 void 在联合类型中不可用,但无论如何这都没什么意义。
static
返回类型
它将遵循与关键字相同的目的static
。你的方法应该返回当前(~子)类中的某些内容,而不是父类中的内容。
class MyClass {
public function myMethod(): static {
return new static();
}
}
惊人的!
Throw
作为表达式
从语句转换Throw
为表达式将允许在 PHP 8 中进行以下用法:
$condition || throw new Exception();
Throw
喜欢使用箭头函数或三元函数的想法。
结论
PHP 8 更好、更快、更强大。迫不及待地想用它了。它看起来是 PHP 迈向类型安全编程语言的第一步。
文章来源:https://dev.to/spo0q/why-php-8-will-be-awesome-2lif