はじめに
こんばんは。
前回のphp8.1をインストールしてみたのですが、今回はphp8.1の目玉っぽい 列挙型を試してみます。
前回の記事は以下
本題
試したバージョンはこちら
$php -v PHP 8.1.6 (cli) (built: Jun 10 2022 23:47:15) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.6, Copyright (c) Zend Technologies with Zend OPcache v8.1.6, Copyright (c), by Zend Technologies with Xdebug v3.1.4, Copyright (c) 2002-2022, by Derick Rethans
cases()
<?php enum Status { case Enable; case Disable; } var_dump(Status::cases()); // array(2) { // [0] => // enum Status::Enable; // [1] => // enum Status::Disable; // }
Backed Enum
<?php enum Status: int { case Enable = 1; case Disable = 0; } var_dump(Status::Enable->value); // int(1) var_dump(Status::Disable->value); // int(0) var_dump(Status::tryFrom(2)); // NULL var_dump(Status::tryFrom(1)); // enum Status::Enable : int(1);
メソッド
<?php enum Color: int { case Red = 10; case Blue = 20; case Yellow = 30; case Green = 40; case Black = 50; case White = 60; public function isRGB(): bool { return match($this) { Color::Red, Color::Green, Color::Blue => true, default => false }; } } var_dump(Color::Red->isRGB()); // => bool(true) var_dump(Color::Blue->isRGB()); // => bool(true) var_dump(Color::Black->isRGB()); // => bool(false)
終わりに
メソッドもてるのが面白いですね。
メソッドもてるからトレイトも使えるみたいです。
個人的にトレイトは混乱するので、あんま使わないかもですが、効率よく使えたらかっこいいなと思いました。
現場からは以上です。