PHP 7.4 中增加了类型化类属性,对 php 的类型系统进行了重大改进。这些更改完全是自愿加入的,不会破坏以前的版本。
在本文中,我们将深入了解该功能,但首先让我们总结一下最重要的几点:
700粉丝福利安排一波,工作中准备的,大家随便拿
程序猿的生活:【社群福利】30G-PHP进阶资料,助力大家都能30Kzhuanlan.zhihu.com这些更改自 PHP 7.4 起可用,计划于 2019 年 11 月发布
- 它们仅在类中可用,并且需要访问修饰符:public、protected 或 private;或 var
- 允许所有类型,但 void 和 callable 除外
- 他们的实际情况是这样的:
class Foo
{
public int $a;
public ?string $b = 'foo';
private Foo $prop;
protected static string $static = 'default';
}
未初始化
在进入正题之前,首先要探讨一个与类型属性有关的重要方面。
不管你第一眼看到这段代码是怎么想的,但它的确是合法的
class Foo
{
public int $bar;
}
$foo = new Foo;
即便是类的实例化后$bar
值仍不是整数值的情况下,PHP 也只是会在访问$bar
时才会报错:
var_dump($foo->bar);
Fatal error: Uncaught Error: Typed property Foo::$bar
must not be accessed before initialization
从错误消息中可以看出,出现了一种新的变量状态:未初始化 (uninitialize