CakePHPでの定数 各種書き方の考察

CakePHP
この記事は約3分で読めます。

定数を設定する方法がいくつかある

どれが最適か?

define

PHP言語構造による伝統的な宣言方法である。CakePHP の場合、以下の方法がある。

  • bootstrap.php 内で、defineする。
  • define を集めたファイルを bootstrap.php 内で、includeする。
  • 通常MVC各ファイル内で、define することはしない。

メリット

  • VSCodeのヒントが使用できる。
  • arrayも使える。(PHP7 以降)
  • 即時関数を使える。

デメリット

  • アプリケーショングローバルなので、CakePHP の MVC デザインパターンを破壊しかねない。
  • 使っていない定数でも常にメモリを確保される。

Configure クラス

定数ではないが、CakePHP の公式の構成クラスである。

(公式):https://book.cakephp.org/4/ja/development/configuration.html

メリット

  • 読み書き・削除ができ、ファイルに保存ができる。

デメリット

  • VSCodeのヒントが使用できない。
  • 書き換えられる可能性がある。そもそも定数でない。
  • アプリケーショングローバルなので、CakePHP の MVC デザインパターンを破壊しかねない。

静的クラス変数

定数専用のクラスを用意して、使いたいMVCファイル内で、use して使用する。

例) src/Constants というディレクトリを作成し、UtilConst.php ファイルを作成する。

<?php
declare(strict_types=1);

namespace App\Constants;

/**
 * 定数
 */
class UtilConst
{
    /**
     * この場合は、 UtilConst::TEST_CONST  で参照
     */
    public const NO_HAS = 0;
    public const HAS = 1;

    /**
     * この場合は、 UtilConst::TYPE_LIST [0]  で参照
     * 普通に、クラス内定数も使用可能。
     */
    public const TYPE_LIST = [
        self::NO_HAS => 'なし',
        self::HAS => 'あり',
    ];

    /**
     * クラスなので、普通にメソッドも利用できる。
     * この場合は、 UtilConst::getArray()  で参照
     */
    public static function getArray() : ?array
    {
        return [];
    }
}

クラスを使用する側では use する。

use App\Constants\UtilConst;
class TestController extends Controller
{
     dd( UtilConst::TYPE_LIST[UtilConst::HAS] ); // あり  と表示される。
}

メリット

  • VSCodeのヒントが使用できる。
  • 名前空間を指定できる。
  • 用途別にファイルを使い分けられる。コントローラーを継承して利用している場合、継承元で use しておけば、子クラスでも利用できるため、適用範囲を管理しやすい。
    基底コントローラー内に定数を置いてもよいが、そうするとビュー側で参照しずらい。
  • ビュー側でも use して使える。

デメリット

  • 用途別に分けたり、ファイルが分散しないように内部的な規約を決めておかないと、混乱する可能性あり。

結論

静的クラス変数 を使うのが良さそう。

タイトルとURLをコピーしました