はじめに
laravelで定数を扱う方法は多々ありますが、この記事ではクラスを使用した方法を解説します。
マジックナンバーについて
まず、開発をする上で注意すべきことにマジックナンバー
というものがあります。
マジックナンバーというのは、それが何を示しているかがわからない文字列や数値
のことです。
プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。まるで魔法の数字だ」という皮肉を含む。
コードで解説をすると、
<?php
class Order
{
public function method($orderStatus)
{
if ($orderStatus === 1) {
// 処理
}
if ($orderStatus === 2) {
// 処理
}
}
}
上記のコードを見ると1
や2
は何を示しているのかがわからないと思います。
この値の意味を理解するにはコードを書いた本人に聞くしかありません。
マジックナンバーのデメリット
- チームメンバーや自分が値の意味を理解するのに時間がかかる
- 値を変更したい場合に複数箇所の修正が必要になることがある
専用のConstクラスファイルを作成する
マジックナンバーを解決するためには色々な方法がありますが、おすすめな方法として専用のConstクラスファイルを作成
するという方法です。
まずは、appディレクトリにConstsディレクトリを作成し、その中にOrderStatusConsts.php(わかりやすく命名)を作成します。
<?php
namespace App\Consts;
class OrderStatusConsts
{
public const STATUS_CANCEL = 1;
public const STATUS_SENT = 2;
}
次にモデルやコントローラーで呼び出すときの記述を簡潔にするために、config/app.phpにエイリアスを定義しておきます。
<?php
return [
'aliases' => [
'OrderStatusConsts' => App\Consts\OrderStatusConsts::class,
],
];
実際に呼び出します。
<?php
class Order
{
public function method($orderStatus)
{
if ($orderStatus === \OrderStatusConsts::STATUS_CANCEL) {
// 処理
}
if ($orderStatus === \OrderStatusConsts::STATUS_SENT) {
// 処理
}
}
}
このように定義することで、マジックナンバーを解決することができ可読性や保守性が上がります。
最後に
定数を扱う方法は他にも、configファイルを作成する
方法やModelクラスファイルに定数を記述する
方法などがありますが、個人やチームでやり方は違うと思うのでこの記事は参考程度に、、、、