久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

PHP枚舉常量

2024-01-03 161

在 PHP 中,雖然枚舉類型(enum)可以包括 public、private、protected 的常量,但是由于它不支持繼承的功能,因此在實(shí)踐中 private 和 protected 的效果是相同的。由于用 enum 自身的常量表示條目,它們可當(dāng)作靜態(tài)值,用于絕大多數(shù)常量表達(dá)式。同時(shí)枚舉也能使用 trait,行為和 class 一樣。

一、枚舉常量示例

枚舉常量可以引用枚舉條目:

<?php
enum Size
{
case Small;
case Medium;
case Large;
public const Huge = self::Large;
}
?>

二、Trait

枚舉也能使用 trait,行為和 class 一樣。 留意在枚舉中 use trait 不允許包含屬性。 只能包含方法、靜態(tài)方法。 包含屬性的 trait 會(huì)導(dǎo)致 fatal 錯(cuò)誤。

<?php
interface Colorful
{
public function color(): string;
}
trait Rectangle
{
public function shape(): string {
return "Rectangle";
}
}
enum Suit implements Colorful
{
use Rectangle;
case Hearts;
case Diamonds;
case Clubs;
case Spades;
public function color(): string
{
return match($this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}
}
?>

三、常量表達(dá)式的枚舉值

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

然而,因?yàn)椴荒鼙WC結(jié)果值絕對(duì)不變,也不能避免調(diào)用方法時(shí)帶來(lái)副作用, 所以枚舉里類似 ArrayAccess 這樣的隱式魔術(shù)方法調(diào)用無(wú)法用于靜態(tài)定義和常量定義。 常量表達(dá)式還是不能使用函數(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
}
// 由于它不是一個(gè)常量表達(dá)式,所以是完全合法的
$x = Direction::Up['short'];
?>
  • 廣告合作

  • QQ群號(hào):4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請(qǐng)注明出處“站長(zhǎng)百科”和原文地址。