SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
コードを書いて理解する!Enumに
ついて
2021/12/17
【PHP8.1リリース記念】PHPerのためのPHP8.1をもっと語り合うPHP TechCafe
hiro(@etBeEP5e7dwmw7P)
自己紹介
・hiro
・Laravel+vue.js+postgresql
・趣味:ボルダリング(最高グレード4D)
・年末の楽しみ:獣道4
今だけフォロバ還元率 100%!!
Twitterのフォローよろしくお願いしま
す!
いきなりですが、
みなさんはPHPでEnumのコードを書きましたか?
利用するサイト: Laravel PlayGround
Lesson1
Pure Enum
<?php
/**
* Lesson1.基本 Pure Enum
*/
// 1.enumの書き方
// enumに続き、case文(推奨:パスカルケース)を続ける
// caseのkeyはユニークである必要がある
enum HogeStatus {
case Hogeing;
case HOGA; // minor
// case Hogeing; // duplicate error
}
// 2.Enumには組み込みのメソッドがある
// case() -> 全caseの配列 (collectionのallメソッドみたい)
echo dd(HogeStatus::cases());
// 内部的にUnit Enumというインターフェースを実装している
// https://www.php.net/manual/ja/language.enumerations.listing.php
// key部分はname属性として定義される
// caseにvalueを書いてないタイプをPure Enumという
Lesson2
Backed Enum
// 1. 各caseにスカラー値のvalueを設定できる
// 参照された時に返す値をBacked Value という
// Backed Valueを定義したEnumをBacked Enumという
/**
* Backed Valueの規約:
* タイプヒント必須
* 全casesに設定必須
* 型は int or string
* 同じ型である必要がある
* ユニーク制約
*/
enum HogeStatus: string {
case Hogeing = 'hoge';
case Huga = 'huga';
}
// 参照する方法①プロパティにアクセス
// echo HogeStatus::Huga->value;
// 参照する方法②組み込みメソッド
// ・cases()
// echo dd(HogeStatus::cases());
// ・from()
// 引数と同じvalueのcaseを返す
// 見つからない時はエラーを返す(findOrFailみたいな感じ)
echo HogeStatus::from('hoge')->value;
// ・tryFrom()
// 引数と同じvalueのcaseを返す
// 見つからない時はnullを返す (find みたいな感じ)
echo HogeStatus::tryFrom('hyou') ?? 'nullだよ';
Lesson3(実践編)は,
時間の関係で割愛させてもらいます。
次のLaravel/PHPイベントでやらせてもらうかも?
すこし早いですが、よい年末を
来年もよろしくおねがいします!
Lesson3
Enum実践編
<?php
/**
* Lesson3. Enum実用編
*/
// Laravel collectionでenumもどきを作ってみる
$order_status_enum = collect([
'reserved' => 0, // 予約
'purchased' => 1, // 購入
'shipping' => 2, // 発送準備中
'delivering' => 3, // 発送済
'delivered' => 10, // 配達済
]);
class Order {
// statusには0,1,2,3,10が入ることを想定しているが、それ以外の値も入ってしまう可能性
public function updateStatus(int $status)
{
echo '注文ステータスを' . $status . 'へ更新'. "<br>";
}
}
// $order = new Order;
// $order->updateStatus($order_status_enum->get('delivering'));
// 動くけどよくない例:1がどんなステータスかわからない
(マジック)
// $order->updateStatus(1);
// バグの原因になりうる例:無効なステータス値も入る
// $order->updateStatus(100);
/**
* Enumを使って実装
*/
class NeoOrder {
// 引数がenumで限定されているため、
public function updateStatus(OrderStatus $status)
{
echo 'NEO 注文ステータスを' . $status->value . 'へ更新'. "<br>";
// echo 'NEO 注文ステータスを' . $status->value . 'へ更新'. "n";
}
}
enum OrderStatus: int {
case Reserved = 0; // 予約
case Purchased = 1; // 購入
case Shipping = 2; // 発送準備中
case Delivering = 3; // 発送済
case Delivered = 10; // 配達済
case Canceled = 20; // キャンセル
case Returned = 30; // 返品
}
$neo_order = new NeoOrder;
// リクエストパラメータの値を
enumへ変換してステータスを変更する例
$params = ['status' => 20];
$status = OrderStatus::from($params['status']);
$neo_order->updateStatus($status);
興味が湧いた方は、こちらも参考にどうぞ
PHPリファレンス Enum: https://www.php.net/manual/ja/language.enumerations.php
PHP8.1 Enums/Ayesh Karunaratne: https://www.youtube.com/watch?v=iKAu1ApYbbw

Contenu connexe

Tendances

最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm晃 遠山
 
Nom de fonction français
Nom de fonction françaisNom de fonction français
Nom de fonction françaishajikami
 
第1回SE勉強会(080302)
第1回SE勉強会(080302)第1回SE勉強会(080302)
第1回SE勉強会(080302)柴田 篤志
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018Rui Hirokawa
 
Testing PHP extension on Travis CI
Testing PHP extension on Travis CITesting PHP extension on Travis CI
Testing PHP extension on Travis CIYoshio Hanawa
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るYoshio Hanawa
 
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」についてYuta Hayakawa
 
Javascript1-1
Javascript1-1Javascript1-1
Javascript1-1Jun Chiba
 

Tendances (9)

最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm最強のPHP統合開発環境 PHPStorm
最強のPHP統合開発環境 PHPStorm
 
Nom de fonction français
Nom de fonction françaisNom de fonction français
Nom de fonction français
 
第1回SE勉強会(080302)
第1回SE勉強会(080302)第1回SE勉強会(080302)
第1回SE勉強会(080302)
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
Testing PHP extension on Travis CI
Testing PHP extension on Travis CITesting PHP extension on Travis CI
Testing PHP extension on Travis CI
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
 
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
【祝9周年】第79回 PHP勉強会プレゼン資料:PHP向けフレームワークの「Risoluto」について
 
Javascript1-1
Javascript1-1Javascript1-1
Javascript1-1
 
F#談話室(17)
F#談話室(17)F#談話室(17)
F#談話室(17)
 

Similaire à コードを書いて理解する!Enumについて

第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造do_aki
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 Mika Kane
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかHisateru Tanaka
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxHideo Kashioka
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたFumito Mizuno
 
PHP AV BINDING
PHP AV BINDINGPHP AV BINDING
PHP AV BINDINGYo Ya
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
Rのコードをキレイに見せたい
Rのコードをキレイに見せたいRのコードをキレイに見せたい
Rのコードをキレイに見せたいmangantempy
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~諒一 上野
 

Similaire à コードを書いて理解する!Enumについて (13)

第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
 
PHP AV BINDING
PHP AV BINDINGPHP AV BINDING
PHP AV BINDING
 
Xhprof
XhprofXhprof
Xhprof
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
Rのコードをキレイに見せたい
Rのコードをキレイに見せたいRのコードをキレイに見せたい
Rのコードをキレイに見せたい
 
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
 

コードを書いて理解する!Enumについて