lmh / enum
1.0.8
2020-10-14 02:19 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-20 10:19:13 UTC
README
使用方法
use Lmh\Enum\AbstractEnum; /** * @method static self MONDAY() * @method static self TUESDAY() * @method static self WEDNESDAY() * @method static self THURSDAY() * @method static self FRIDAY() * @method static self SATURDAY() * @method static self SUNDAY() */ final class WeekDay extends AbstractEnum { protected const MONDAY = null; protected const TUESDAY = null; protected const WEDNESDAY = null; protected const THURSDAY = null; protected const FRIDAY = null; protected const SATURDAY = null; protected const SUNDAY = null; }
function tellItLikeItIs(WeekDay $weekDay) { switch ($weekDay) { case WeekDay::MONDAY(): echo 'Mondays are bad.'; break; case WeekDay::FRIDAY(): echo 'Fridays are better.'; break; case WeekDay::SATURDAY(): case WeekDay::SUNDAY(): echo 'Weekends are best.'; break; default: echo 'Midweek days are so-so.'; } } tellItLikeItIs(WeekDay::MONDAY()); tellItLikeItIs(WeekDay::WEDNESDAY()); tellItLikeItIs(WeekDay::FRIDAY()); tellItLikeItIs(WeekDay::SATURDAY()); tellItLikeItIs(WeekDay::SUNDAY());
更复杂的示例
当然,所有的枚举都是单例,不能克隆或序列化。因此,您可以确信总是只有一个相同类型的实例。当然,常量的值并非完全无用,让我们看看一个更复杂的示例
use Lmh\Enum\AbstractEnum; /** * @method static self MERCURY() * @method static self VENUS() * @method static self EARTH() * @method static self MARS() * @method static self JUPITER() * @method static self SATURN() * @method static self URANUS() * @method static self NEPTUNE() */ final class Planet extends AbstractEnum { protected const MERCURY = [3.303e+23, 2.4397e6]; protected const VENUS = [4.869e+24, 6.0518e6]; protected const EARTH = [5.976e+24, 6.37814e6]; protected const MARS = [6.421e+23, 3.3972e6]; protected const JUPITER = [1.9e+27, 7.1492e7]; protected const SATURN = [5.688e+26, 6.0268e7]; protected const URANUS = [8.686e+25, 2.5559e7]; protected const NEPTUNE = [1.024e+26, 2.4746e7]; /** * Universal gravitational constant. * * @var float */ private const G = 6.67300E-11; /** * Mass in kilograms. * * @var float */ private $mass; /** * Radius in meters. * * @var float */ private $radius; protected function __construct(float $mass, float $radius) { $this->mass = $mass; $this->radius = $radius; } public function mass() : float { return $this->mass; } public function radius() : float { return $this->radius; } public function surfaceGravity() : float { return self::G * $this->mass / ($this->radius * $this->radius); } public function surfaceWeight(float $otherMass) : float { return $otherMass * $this->surfaceGravity(); } } $myMass = 80; foreach (Planet::values() as $planet) { printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass)); }