PHP8.2 将于2022年12月8日发布,特性及变更如下
新增 #[\SensitiveParameter] 属性用于编辑回溯中的敏感数据。
新增error_log_mode INI 指令,允许设置错误日志的权限。
现在可以在常量表达式中获取枚举属性。
现在可以使用 null 和 false 作为独立类型。
新增 true 类型。
现在可以组合交集和联合类型。类型需要用 DNF 编写。
现在可以在 trait 中定义常量。
新增对只读类的支持。
readonly class Foo
{
public $bar = 1;
}
弃用动态属性创建,除非类选择使用 #[\AllowDynamicProperties]
注解。stdClass
允许动态属性。__get()
/__set()
魔术方法不受此更改的影响。解决动态属性弃用警告,可以通过以下方式:
#[\AllowDynamicProperties]
添加到 #[\AllowDynamicProperties]
(这也适用于所有子类)。弃用 $callable()
语法不接受的可调用对象(但 call_user_func()
接受)。尤其是:
"A::method"
或 ["A", "method"]
。弃用字符串插值的 "${var}"
和 "${expr}"
样式。 Use "$var"
/"{$var}"
and "{${expr}}"
, respectively.
总体与PHP8.1变化不大,比较大的一个兼容性问题是类的动态属性默认不再支持。例如:
class Foo
{
}
$foo = new Foo;
// 这里给类动态添加属性将报错
$foo->someVaue = 'some data';
不过可以通过给类增加#[\AllowDynamicProperties]
注解解决,例如
#[\AllowDynamicProperties]
class Foo
{
}
$foo = new Foo;
// 不报错
$foo->someVaue = 'some data';
get
ok
可以在说下 fiber()->then 吗
这个看不懂,求指教原先是啥
弃用 $callable() 语法不接受的可调用对象(但 call_user_func() 接受)。尤其是:
这不会影响正常方法调用,比如 "A::method" 或 ["A", "method"]。
本身就很少用到,不影响的
哈哈,我百度了,确实,就是写的明确些,
"self::method" -> self::class . "::method"
"parent::method" -> parent::class . "::method"
"static::method" -> static::class . "::method"
["self", "method"] -> [self::class, "method"]
["parent", "method"] -> [parent::class, "method"]
["static", "method"] -> [static::class, "method"]
// 下面2个写法无实际意义
["Foo", "Bar::method"] -> "Foo::Bar::method"
[new Foo, "Bar::method"] -> "Foo::Bar::method"
强大