PHP8 常量表達式的枚舉值

2023-08-19 16:07 更新

由于用 enum 自身的常量表示條目,它們可當(dāng)作靜態(tài)值,用于絕大多數(shù)常量表達式: 屬性默認(rèn)值、變量默認(rèn)值、參數(shù)默認(rèn)值、全局和類常量。 他們不能用于其他 enum 枚舉值,但通常的常量可以引用枚舉條目。

然而,因為不能保證結(jié)果值絕對不變,也不能避免調(diào)用方法時帶來副作用, 所以枚舉里類似 ArrayAccess 這樣的隱式魔術(shù)方法調(diào)用無法用于靜態(tài)定義和常量定義。 常量表達式還是不能使用函數(shù)調(diào)用、方法調(diào)用、屬性訪問。

<?php
// 這是完全合法的 Enum 定義
enum Direction implements ArrayAccess
{
case Up;
case Down;

public function offsetGet($val) { ... }
public function offsetExists($val) { ... }
public function offsetSet($val) { throw new Exception(); }
public function offsetUnset($val) { throw new Exception(); }
}

class Foo
{
// 可以這樣寫。
const Bar = Direction::Down;

// 由于它是不確定的,所以不能這么寫。
const Bar = Direction::Up['short'];
// Fatal error: Cannot use [] on enums in constant expression
}

// 由于它不是一個常量表達式,所以是完全合法的
$x = Direction::Up['short'];
?>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號