列挙型と static メソッド

列挙型は、static メソッドを持つこともできます。 列挙型で static メソッドを使う主な理由は、 コンストラクタの代わりをさせるためです。たとえば、以下のようなものです:

<?php

enum Size
{
case
Small;
case
Medium;
case
Large;

public static function
fromLength(int $cm): self
{
return match(
true) {
$cm < 50 => self::Small,
$cm < 100 => self::Medium,
default =>
self::Large,
};
}
}
?>

static メソッドには public, private, protected が指定できますが、 列挙型では実際 private と protected は同じものです。 なぜなら、継承が許されていないからです。