PHP8.2 將于2022年12月8日發(fā)布,特性及變更如下
新增 #[\SensitiveParameter] 屬性用于編輯回溯中的敏感數(shù)據(jù)。
新增error_log_mode INI 指令,允許設(shè)置錯(cuò)誤日志的權(quán)限。
現(xiàn)在可以在常量表達(dá)式中獲取枚舉屬性。
現(xiàn)在可以使用 null 和 false 作為獨(dú)立類型。
新增 true 類型。
現(xiàn)在可以組合交集和聯(lián)合類型。類型需要用 DNF 編寫。
現(xiàn)在可以在 trait 中定義常量。
新增對(duì)只讀類的支持。
readonly class Foo
{
public $bar = 1;
}
棄用動(dòng)態(tài)屬性創(chuàng)建,除非類選擇使用 #[\AllowDynamicProperties]
注解。stdClass
允許動(dòng)態(tài)屬性。__get()
/__set()
魔術(shù)方法不受此更改的影響。解決動(dòng)態(tài)屬性棄用警告,可以通過以下方式:
#[\AllowDynamicProperties]
添加到 #[\AllowDynamicProperties]
(這也適用于所有子類)。棄用 $callable()
語法不接受的可調(diào)用對(duì)象(但 call_user_func()
接受)。尤其是:
"A::method"
或 ["A", "method"]
。棄用字符串插值的 "${var}"
和 "${expr}"
樣式。 Use "$var"
/"{$var}"
and "{${expr}}"
, respectively.
總體與PHP8.1變化不大,比較大的一個(gè)兼容性問題是類的動(dòng)態(tài)屬性默認(rèn)不再支持。例如:
class Foo
{
}
$foo = new Foo;
// 這里給類動(dòng)態(tài)添加屬性將報(bào)錯(cuò)
$foo->someVaue = 'some data';
不過可以通過給類增加#[\AllowDynamicProperties]
注解解決,例如
#[\AllowDynamicProperties]
class Foo
{
}
$foo = new Foo;
// 不報(bào)錯(cuò)
$foo->someVaue = 'some data';
這個(gè)看不懂,求指教原先是啥
棄用 $callable() 語法不接受的可調(diào)用對(duì)象(但 call_user_func() 接受)。尤其是:
哈哈,我百度了,確實(shí),就是寫的明確些,
"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個(gè)寫法無實(shí)際意義
["Foo", "Bar::method"] -> "Foo::Bar::method"
[new Foo, "Bar::method"] -> "Foo::Bar::method"